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


9

ストアドプロシージャ(SS2k8)があり、テーブル値パラメーターがいくつかあり、それらがnullまたは空になる場合があります。このStackOverflowの投稿を見たところ、null /空のTVPは呼び出しパラメーターリストから単に削除する必要があると述べています。私の問題は、「IF(@tvp IS NULL)」がプロシージャの作成に失敗し、「スカラー変数「@tvpを宣言する必要があります」というメッセージが表示されるため、ストアドプロシージャ内の空またはnullを確認する方法を理解できないことです。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
...

回答:


14

テーブルをにすること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
...

3

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.