Wie überprüfe ich, ob ein Parameter mit Tabellenwert null oder leer ist?

9

Ich habe eine gespeicherte Prozedur (SS2k8) mit einigen tabellenwertigen Parametern, die manchmal null oder leer sind. Ich habe diesen StackOverflow-Beitrag gesehen , der besagt, dass null / leere TVPs einfach in der Liste der aufrufenden Parameter weggelassen werden sollten. Mein Problem ist, dass ich nicht herausfinden kann, wie in der gespeicherten Prozedur nach Leer oder Null gesucht werden kann, da "IF (@tvp IS NULL)" bei der Prozedurerstellung mit der Meldung "Muss die skalare Variable" @tvp "deklarieren" fehlschlägt. Muss ich auf dem TVP einen SELECT COUNT (*) ausführen und auf Null prüfen?

Code-Auszug:

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
quelle

Antworten:

14

Ein Tisch kann nicht sein NULL, noch kann ein TVP. Wie prüft man, ob eine Tabelle leer ist? Das sagst du bestimmt nicht 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
quelle
3

Der Tabellenwertparameter wird nicht null sein. Behandle es eher wie einen Tisch und @aaraon Bertrand schlug mich bis zum Anschlag. Also ja, prüfen Sie, ob es Zeilen gibt.

billinkc
quelle