2017-09-14 150 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;