Как проверить, пуста ли переменная таблицы в SQL Server?
это раздел одной из моих хранимых процедур:
@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 ) )
)
3 ответов
для проверки, если переменная таблицы пуста, просто используйте существует, как уже упоминалось другими людьми,
но
Если вы отличаете пустой набор от неизвестного набора-тогда у вас нет выбора - вы должны ввести дополнительную переменную, которая указывает, действительно ли пустой набор пуст или неизвестен.
declare @dataInTableIsUnknown BIT
...
AND (
( @dataInTableIsUnknown = 1 )
OR
( item IN ( SELECT T FROM @dataInTable ) )
)
переменные таблицы отличаются от скалярных переменных so @dataInTable IS NULL
не допускается, как вы упомянули. Я бы предложил следующее:
EXISTS (SELECT 1 FROM @dataInTable)
следующее также может иметь смысл для вашей ситуации, если вы действительно хотите знать количество:
DECLARE @dataCount int = (SELECT COUNT(1) FROM @dataInTable)
IF @dataCount = 0 -- Empty