如何从存储过程中返回用户定义表类型

3

我在SQL Server中创建了一个自定义的表类型:

Create Type dbo.Car AS Table 
(
 CarNumber varchar(20) not null,
 Model varchar(20) null
)

这里还有许多其他领域,这只是一个例子。

现在我有一个存储过程,需要它返回此类型的汽车列表。问题在于:我找不到一种方法来从存储过程返回用户定义的表类型。

如果我将其声明为过程中的参数,则必须为只读,因此无法对其进行赋值。如果我声明一个此类型的变量并尝试从过程中返回它,则会被拒绝。

这是我尝试过的:

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"'

什么是正确的做法?

2
你可以只进行选择操作,而不需要将数据插入到 @CarDetails 表中;或者保留插入操作,然后执行这个语句:select * from @CarDetails - Rigerta
1个回答

1

您无法从存储过程中返回表值变量。

正如您所说,如果未将表值参数声明为readonly,则无法使用它。

在您的简单情况下,您可以使用内联表值函数代替:

create function  getCarDetails( @carNumber varchar(20))
returns table
as
  return 
       select CarNumber, Model
       from dbo.cars
       where CarNumber = @carNumber;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接