我在 SQL Server 中创建了一个用户定义的表类型:
Create Type dbo.Car AS Table
(
CarNumber varchar(20) not null,
Model varchar(20) null
)
还有很多其他的字段,这只是一个例子。
现在我有一个存储过程,我需要它返回此类型的汽车列表。问题是:我找不到从存储过程返回用户定义的表类型的方法。
如果我在过程中将它声明为参数,它必须是只读的,所以我不能给它赋值。如果我从这种类型声明一个 var 并尝试从它不允许的过程中返回它。
这是我尝试过的:
Create procedure getCarDetails
@carNumber varchar(20)
AS
BEGIN
SET NOCOUNT ON;
Declare @CarDetails AS dbo.Car
insert into @CarDetails (CarNumber,Model)
select CarNumber, Model
from cars
where cars.CarNumber = @carNumber
-- here I need to return the @CarDetails
-- if I try
-- return @CarDetails
-- It says 'must declare the scalar variable "@CarDetails"'
正确的做法是什么?
最佳答案
您不能从存储过程中返回表值变量。
如您所说,如果表值参数未声明为 readonly
,则不能使用它。
在您的简单情况下,您可以改用内联表值函数:
create function getCarDetails( @carNumber varchar(20))
returns table
as
return
select CarNumber, Model
from dbo.cars
where CarNumber = @carNumber;
关于sql-server - 如何从存储过程返回用户定义的表类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46213431/