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

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.