Как проверить наличие нулевого или пустого табличного параметра?

9

У меня есть хранимая процедура (SS2k8) с парой табличных параметров, которые иногда будут нулевыми или пустыми. Я видел этот пост StackOverflow, в котором говорится, что нулевые / пустые TVP должны быть просто исключены из списка параметров вызова. Моя проблема заключается в том, что я не могу понять, как проверить наличие пустых или нулевых значений внутри хранимой процедуры, поскольку «IF (@tvp IS NULL)» завершается неудачно при создании процедуры с сообщением «Необходимо объявить скалярную переменную« @tvp »». Должен ли я сделать SELECT COUNT (*) на TVP и проверить на ноль?

Выдержка из кода:

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

Табличный параметр не будет нулевым. Относись к нему как к столу, и @aaraon Бертран избил меня до отказа. Так что да, проверьте, есть ли строки.

billinkc
источник