Como verifico um parâmetro com valor de tabela nulo ou vazio?

9

Eu tenho um procedimento armazenado (SS2k8) com alguns parâmetros com valor de tabela que às vezes serão nulos ou vazios. Eu vi esse post StackOverflow que diz que TVPs nulos / vazios devem ser simplesmente omitidos da lista de parâmetros de chamada. Meu problema é que não consigo descobrir como procurar vazio ou nulo dentro do procedimento armazenado, pois "IF (@tvp IS NULL)" falha na criação do procedimento com a mensagem 'Deve declarar a variável escalar "@tvp"'. Preciso fazer uma CONTAGEM SELECIONADA (*) na TVP e verificar se há zero?

Trecho do código:

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
...
Dan
fonte

Respostas:

14

Uma mesa não pode ser NULL, nem um TVP. Como você verifica se uma tabela está vazia? Você certamente não diz 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
...
Aaron Bertrand
fonte
3

O parâmetro com valor de tabela não será nulo. Trate-o mais como uma mesa e @aaraon Bertrand me venceu. Então, sim, verifique se há linhas.

billinkc
fonte