これは、私のストアドプロシージャの1つのセクションです。
@dataInTable dbo.Table_Variable readonly,
....
AND (
( @dataInTable IS NULL )
OR
( item IN ( SELECT T FROM @dataInTable ) )
)
@dataInTable IS NULL
構文が間違っています、エラーは
スカラー変数「@dataInTable」を宣言する必要があります
だから私はそれを次のように変更します:
(SELECT T FROM @dataInTable) IS NULL
これは機能しますが、@dataInTable
に複数のアイテムがあり、エラーが発生します:
サブクエリは複数の値を返しました。サブクエリが=、!=、<、<=、>、> =の後に続く場合、またはサブクエリが式として使用される場合、これは許可されません。
理解できるので、次のように変更します。
(SELECT TOP(1) T FROM @ProgramRatings) IS NULL
完璧に動作します。私が持っているのはパフォーマンスの問題です。
テーブル変数が空かどうかを確認する簡単な方法があるかどうか疑問に思っています。
AND (
( @dataInTable IS EMPTY )
OR
( item IN ( SELECT T FROM @dataInTable ) )
)
テーブル変数が空かどうかを確認するには、他の人がすでに述べたようにEXISTSを使用します。
しかし
空のセットと未知のセットが異なる場合(選択の余地はありません)、空のセットが本当に空であるか不明であるかを示す追加の変数を導入する必要があります。
declare @dataInTableIsUnknown BIT
...
AND (
( @dataInTableIsUnknown = 1 )
OR
( item IN ( SELECT T FROM @dataInTable ) )
)
テーブル変数はスカラー変数とは異なるため、@dataInTable IS NULL
あなたが言ったように許可されていません。私は次のことを提案します:
EXISTS (SELECT 1 FROM @dataInTable)
あなたが実際にカウントを知りたいのであれば、以下もあなたの状況に意味があるかもしれません:
DECLARE @dataCount int = (SELECT COUNT(1) FROM @dataInTable)
IF @dataCount = 0 -- Empty
常にexists
があります。
例えば:
select 'Yep'
where exists (select 1 from @dataInTable)