Die direkte Übergabe von durch Kommas getrennten Zeichenfolgen an die IN
-Funktion von SQL Server führt häufig zu Typkonvertierungsfehlern. Zum Beispiel:
<code class="language-sql">DECLARE @Ids varchar(50); SET @Ids = '1,2,3,5,4,6,7,98,234'; SELECT * FROM sometable WHERE tableid IN (@Ids);</code>
Dies führt zu einem Fehler „Konvertierung fehlgeschlagen“, da die IN
-Klausel einzelne Ganzzahlwerte und keine Zeichenfolge erwartet.
Eine dynamische SQL-freie Lösung
Eine robuste Alternative, die die Fallstricke von dynamischem SQL vermeidet, besteht in der Nutzung der CHARINDEX
-Funktion:
<code class="language-sql">DECLARE @Ids varchar(50); SET @Ids = ',1,2,3,5,4,6,7,98,234,'; -- Note the leading and trailing commas SELECT * FROM sometable WHERE CHARINDEX(',' + CAST(tableid AS VARCHAR(8000)) + ',', @Ids) > 0;</code>
Durch das Hinzufügen von Kommas vor und nach sowohl der Eingabezeichenfolge @Ids
als auch der Umwandlung tableid
stellen wir sicher, dass jeder einzelne Wert innerhalb der durch Kommas getrennten Zeichenfolge korrekt identifiziert wird. Die CHARINDEX
-Funktion prüft dann effizient, ob jedes tableid
in der geänderten @Ids
-Zeichenfolge vorhanden ist. Dadurch wird das Verhalten der IN
-Klausel effektiv nachgeahmt, ohne dass dynamisches SQL erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie übergebe ich durch Kommas getrennte Werte an die IN-Funktion von SQL Server ohne dynamisches SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!