29

テーブル値パラメーターをオプションパラメーターとして使用してプロシージャーを作成することは可能ですか。

次のコードを試しました。

CREATE PROCEDURE SP
@Table testteype = null READONLY
AS 
....

しかし、私はこのエラーを受け取ります:

Operand type clash: void type is incompatible with test type 

ps:C#.NetでSQLサーバーを使用しています

4

4 に答える 4

60

テーブル値パラメーターには、常に空のテーブルの暗黙の値があります。したがって、実際にはパラメータなしでそのプロシージャを呼び出すことができ、実行されますが、テーブルは空になります。

したがって、テーブル値パラメーターにデフォルト値のラベルを付けることは実際には意味がありません。「=null」を削除し、テーブルの内容を確認してください。

于 2013-09-20T22:03:18.673 に答える
6

基本的に、デフォルト値「= null」を持つことは意味がなく、エラーの原因です。

デフォルトで@Table testteypeは、空のテーブルの値を取得します。したがって、=nullを削除できます。

CREATE PROCEDURE SP
@Table testteype  READONLY
AS 
....

参照: C#ADO.NETでこれを使用する方法のサンプルについては、この投稿を使用することをお勧めします-SQLServerのテーブル値パラメーターの使用

于 2013-01-08T02:04:53.713 に答える
0
--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 
于 2021-06-15T12:20:55.597 に答える
-1

上記の答えがデフォルト値をNULLにすることが正しくない理由はわかりませんが、これは私にとってはうまくいきます。

CREATE PROCEDURE SP
(
    @Param1 VARCHAR(10),
    @Param2 VARCHAR(10)=NULL
)

SELECT......
WHERE @Param1 = SOMETHING
AND (@Param2 = SOMETHING OR @Param2 IS NULL)
于 2017-08-10T17:38:28.433 に答える