2016-03-22 21 views
7

私はストアドプロシージャの1つでテーブル値パラメータを使用しています。ここで私が使用する構文は次のとおりです。デフォルト値をテーブル値付きパラメータ - SQL Server

@districtlist NumericList readonly 

NumericListはユーザー定義テーブル型です)。

しかし、私はこのテーブル値のパラメータにデフォルト値を渡す必要があります。

@districtlist NumericList = 0 readonly 

しかし、上記のコードは構文エラーをスローします。テーブル値のパラメータにデフォルト値を渡すことは可能ですか?誰かが私にこれを助けることができますか?

+2

これは**テーブル**なので、実際には、デフォルトの値を加えた*テーブルインスタンス*を定義するか、パラメータとして '@districtlist NumericList = NULL'を使うことができます(' NULL 'デフォルト値 'として) –

+0

@ディストリビューションリストNumericList = NULLは私のためには機能しません。それは "Operand型のクラッシュをスロー:NumericListとNULLが互換性がありません"エラー – bmsqldev

答えて

8

パラメータが定義されていない場合でも、パラメータを渡すことはできません。例:

CREATE TYPE TestTable AS TABLE (my_id INT) 
GO 

CREATE PROCEDURE dbo.Test_TVP 
    @my_table TestTable READONLY, 
    @my_int INT 
AS 
BEGIN 
    SELECT * FROM @my_table 
END 
GO 

EXEC dbo.Test_TVP @my_int = 2 
GO 

DROP PROCEDURE dbo.Test_TVP 
DROP TYPE TestTable 

この場合、テーブルは単に空白になります。いくつかのデフォルト行が必要な場合は、テーブル値のパラメータがREADONLYである必要があるため、ストアドプロシージャでその値をシミュレートする必要があります。

+0

ありがとうございます。 @districtlistテーブルをnullとして渡します – bmsqldev

+0

'NULL'として渡そうとすると失敗します。たとえば、 '@my_table = NULL'は' NULL 'がテーブルのデータ型と互換性がないというエラーを返します。 –

+0

私が意味するものは、C#コードでは、単に挿入リストでnullまたは0を使用し、SQLコードにリストを渡します。 – bmsqldev

1

デフォルトとしてTVPを渡すことができます空のテーブルに相当します

EXEC dbo.Test_TVP @my_table = default 

関連する問題