EXISTS-Ersatz bei dynamischem SQL

28/08/2009 - 12:00 von Lutz Uhlmann | Report spam
Hallo NG!

SQL-Server 2005

In einer meiner SPs prüfe ich mittels EXISTS() die Existenz eines Datensatzes ab.

Die einfache Variante lautet:
IF (EXISTS(SELECT ID FROM schema.Tabelle WHERE ID=@nID))

Die etwas kompliziertere Variante soll eine dynamische Erweiterung enthalten indem ich prüfe ob eine
Spalte innerhalb eines Wertebereiches liegt
Spalte IN (1,2,6) oder (Spalte=1 OR Spalte=2 OR Spalte=6)

Die erste Idee war
SET @sSQL = N'SELECT ID FROM schema.Tabelle WHERE ID=' + @nID + N' AND Spalte IN (' + @sFilter +
N')'

Wie prüfe ich damit aber am günstigsten die Existenz des Datensatzes???
EXISTS(@sSQL) funktioniert ja nicht ...

Danke schonmal

Lutz
 

Lesen sie die antworten

#1 Elmar Boye
28/08/2009 - 12:46 | Warnen spam
Hallo Lutz,

Lutz Uhlmann schrieb:
In einer meiner SPs prüfe ich mittels EXISTS() die Existenz eines Datensatzes ab.

Die einfache Variante lautet:
IF (EXISTS(SELECT ID FROM schema.Tabelle WHERE ID=@nID))

Die etwas kompliziertere Variante soll eine dynamische Erweiterung enthalten
indem ich prüfe ob eine Spalte innerhalb eines Wertebereiches liegt
Spalte IN (1,2,6) oder (Spalte=1 OR Spalte=2 OR Spalte=6)

Die erste Idee war
SET @sSQL = N'SELECT ID FROM schema.Tabelle WHERE ID=' + @nID + N' AND Spalte IN (' + @sFilter +
N')'

Wie prüfe ich damit aber am günstigsten die Existenz des Datensatzes???



EXISTS kann man über CASE einbetten:

SELECT CASE WHEN EXISTS(SELECT * FROM schema.Tabelle WHERE ID=@nID)
THEN CAST(1 AS bit)
ELSE CAST(0 AS bit)
END AS IdExists

das geht auch mit komplexeren Bedingungen, wie Deinem Filter.

Gruß Elmar

Ähnliche fragen