2017-09-14 84 views
1

返回一个用户定义的表类型,我创建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"' 

是什么做的正确方法吗?

+2

你既可以只是选择,没有插入到这个'@ CarDetails'表或让你的插入,然后做到这一点:'从@ CarDetails中选择*。 –

回答

1

你只是不能从存储过程返回表值变量。

如上所述,如果未声明为readonly,则不能使用表值参数。

在您简单的情况下,你可以使用,而不是内嵌表值函数:

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