it-swarm.com.de

Wie überprüfe ich, ob ein Parameter mit Null- oder leeren Tabellenwerten vorhanden ist?

Ich habe eine gespeicherte Prozedur (SS2k8) mit einigen tabellenwertigen Parametern, die manchmal null oder leer sind. Ich habe dies gesehen StackOverflow post , das besagt, dass null/leere TVPs einfach aus der aufrufenden Parameterliste 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 deklarieren "fehlschlägt die skalare Variable "@tvp" '. Muss ich einen SELECT COUNT (*) auf dem TVP 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
...
9
Dan

Eine Tabelle kann weder NULL noch ein TVP sein. Wie prüft man, ob eine Tabelle leer ist? Sie sagen sicher 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
...
14
Aaron Bertrand

Der Tabellenwertparameter wird nicht null sein. Behandle es eher wie einen Tisch und @aaraon Bertrand schlug mich bis zum Anschlag. Überprüfen Sie also, ob Zeilen vorhanden sind.

3
billinkc