Wie überprüft man, ob eine Tabellenvariable in SQL Server leer ist?

9

Dies ist ein Abschnitt einer meiner gespeicherten Prozeduren:

%Vor%

@dataInTable IS NULL ist falsch in der Syntax, Fehler ist

  

Muss die skalare Variable "@dataInTable"

deklarieren

Also ändere ich es zu:

%Vor%

Das funktioniert, aber wenn @dataInTable mehr als 1 Element hat, bekomme ich einen Fehler:

  

Die Unterabfrage hat mehr als einen Wert zurückgegeben. Dies ist nicht erlaubt, wenn die   Unterabfrage folgt =,! =, & lt ;, & lt; =, & gt ;, & gt; = oder wenn die Unterabfrage als verwendet wird   ein Ausdruck.

Verständlich, also ändere ich es zu:

%Vor%

Funktioniert perfekt, was ich habe, ist Performance-Bedenken.

Ich frage mich, ob es eine einfachere Möglichkeit gibt zu überprüfen, ob eine Tabellenvariable leer ist, wie

%Vor%     
Eric Yin 05.01.2012, 18:17
quelle

3 Antworten

6

Um zu überprüfen, ob die Tabellenvariable leer ist, verwenden Sie EXISTS wie bereits von anderen Personen erwähnt,

aber

Wenn Sie leere Menge von unbekannter Menge unterscheiden - dann haben Sie keine Wahl - Sie müssen zusätzliche Variable einführen, die angibt, ob leere Menge wirklich leer oder unbekannt ist.

%Vor%     
Oleg Dok 05.01.2012, 18:48
quelle
21

Tabellenvariablen unterscheiden sich von skalaren Variablen, daher ist @dataInTable IS NULL nicht zulässig, wie Sie bereits erwähnt haben. Ich würde Folgendes vorschlagen:

%Vor%

Das Folgende kann auch für Ihre Situation sinnvoll sein, wenn Sie die Anzahl wirklich wissen möchten:

%Vor%     
Phil Klein 05.01.2012 18:26
quelle
11

Es gibt immer exists .

Zum Beispiel:

%Vor%     
Factor Mystic 05.01.2012 18:28
quelle