Come posso verificare la presenza di un parametro con valori di tabella nulli o vuoti?


9

Ho una procedura memorizzata (SS2k8) con un paio di parametri con valori di tabella che a volte saranno nulli o vuoti. Ho visto questo post StackOverflow che dice che i TVP null / vuoti dovrebbero semplicemente essere omessi dall'elenco dei parametri di chiamata. Il mio problema è che non riesco a capire come controllare se la procedura memorizzata è vuota o nulla poiché "IF (@tvp IS NULL)" non riesce alla creazione della procedura con il messaggio "Deve dichiarare la variabile scalare" @tvp "'. Devo fare un SELECT COUNT (*) sul TVP e controllare lo zero?

Estratto di codice:

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

Risposte:


14

Un tavolo non può essere NULL, né un TVP. Come si controlla se una tabella è vuota? Certamente non lo dici 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

Il parametro con valori di tabella non sarà nullo. Trattalo più come un tavolo e @aaraon Bertrand mi ha battuto a pugni. Quindi sì, controlla se ci sono righe.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.