web-dev-qa-db-ja.com

nullまたは空のテーブル値パラメーターを確認するにはどうすればよいですか?

ストアドプロシージャ(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
...
9
Dan

テーブルを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
...
14
Aaron Bertrand

テーブル値パラメーターはnullにはなりません。テーブルのように扱ってください。@ aaraon Bertrandが私を殴りました。はい、行があるかどうかを確認します。

3
billinkc