Это раздел одной из моих хранимых процедур:
@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
имеет более 1 элемента, я получаю сообщение об ошибке:
Подзапрос вернул более 1 значения. Это не разрешено, когда
подзапрос следует =,! =, <, <=,>,> = или когда подзапрос используется как
выражение.
Понятно, поэтому я изменяю его на:
(SELECT TOP(1) T FROM @ProgramRatings) IS NULL
Работает отлично, меня беспокоит производительность.
Мне интересно, есть ли более простой способ проверить, является ли переменная таблицы пустой, например
AND (
( @dataInTable IS EMPTY )
OR
( item IN ( SELECT T FROM @dataInTable ) )
)