2017-09-14 7 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'テーブルに挿入せず、選択をするか、またはあなたのインサートを維持して、これを行うことができますいずれか: 'select * from @ CarDetails'。 –

答えて

1

ストアドプロシージャからテーブル値の変数を返すことはできません。

あなたが言ったように、テーブル値パラメータがreadonlyと宣言されていない場合は、このパラメータを使用できません。あなたの代わりに、インラインテーブル値関数を使用することができ、あなたの簡単な場合には

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