ストアドプロシージャ(SS2k8)があり、いくつかのテーブル値パラメーターがあり、それらがnullまたは空になる場合があります。私はこれを見てきました StackOverflow post これは、null /空のTVPが呼び出しパラメーターリストから単純に省略される必要があることを示しています。私の問題は、「IF(@tvp IS NULL)」がプロシージャの作成に失敗し、メッセージ 'Must declareスカラー変数 "@tvp" '。TVPでSELECT COUNT(*)を実行してゼロをチェックする必要がありますか?
コードの抜粋:
CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS
IF (@tvp IS NOT NULL) -- doesn't work
BEGIN
-- lots of expensive processing
END
ELSE
BEGIN
-- a little bit of cheap processing
END
...
テーブルをNULL
にすることも、TVPにすることもできません。テーブルが空かどうかをどのように確認しますか?あなたは確かにIF Sales.SalesOrderHeader IS NULL
。 :-)
IF EXISTS (SELECT 1 FROM @tvp)
BEGIN
-- lots of expensive processing
END
ELSE
BEGIN
-- a little bit of cheap processing
END
...
テーブル値パラメーターはnullにはなりません。テーブルのように扱ってください。@ aaraon Bertrandが私を殴りました。はい、行があるかどうかを確認します。