テーブル値パラメーターをオプションパラメーターとして使用してプロシージャーを作成することは可能ですか。
次のコードを試しました。
CREATE PROCEDURE SP
@Table testteype = null READONLY
AS
....
しかし、私はこのエラーを受け取ります:
Operand type clash: void type is incompatible with test type
ps:C#.NetでSQLサーバーを使用しています
テーブル値パラメーターをオプションパラメーターとして使用してプロシージャーを作成することは可能ですか。
次のコードを試しました。
CREATE PROCEDURE SP
@Table testteype = null READONLY
AS
....
しかし、私はこのエラーを受け取ります:
Operand type clash: void type is incompatible with test type
ps:C#.NetでSQLサーバーを使用しています
テーブル値パラメーターには、常に空のテーブルの暗黙の値があります。したがって、実際にはパラメータなしでそのプロシージャを呼び出すことができ、実行されますが、テーブルは空になります。
したがって、テーブル値パラメーターにデフォルト値のラベルを付けることは実際には意味がありません。「=null」を削除し、テーブルの内容を確認してください。
基本的に、デフォルト値「= null」を持つことは意味がなく、エラーの原因です。
デフォルトで@Table testteype
は、空のテーブルの値を取得します。したがって、=nullを削除できます。
CREATE PROCEDURE SP
@Table testteype READONLY
AS
....
参照: C#ADO.NETでこれを使用する方法のサンプルについては、この投稿を使用することをお勧めします-SQLServerのテーブル値パラメーターの使用
--exa:
--create TYPE Table_tt as table(id int,name varchar(10))
create table #a (aid int,price int)
insert into #a (aid ,price )
select 1,10
union
select 2,50
create PROCEDURE SP
@Table_tt Table_tt null READONLY
AS
begin
select * into #tem from @Table_tt
select * from #a where aid in(select id from #tem) or aid=''
end
exec SP
上記の答えがデフォルト値をNULLにすることが正しくない理由はわかりませんが、これは私にとってはうまくいきます。
CREATE PROCEDURE SP
(
@Param1 VARCHAR(10),
@Param2 VARCHAR(10)=NULL
)
SELECT......
WHERE @Param1 = SOMETHING
AND (@Param2 = SOMETHING OR @Param2 IS NULL)