Heim >Datenbank >MySQL-Tutorial >Wie übergebe ich eine durch Kommas getrennte Zeichenfolge an die IN-Funktion von SQL Server ohne dynamisches SQL?
Vermeiden von dynamischem SQL: Umgang mit durch Kommas getrennten Werten in der IN-Klausel von SQL Server
Die direkte Übergabe einer durch Kommas getrennten Zeichenfolge an die IN
-Funktion von SQL Server führt häufig zu Typkonvertierungsfehlern. Sehen wir uns ein häufiges Szenario an:
<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 Konvertierungsfehler, da die IN
-Klausel einzelne Ganzzahlwerte und keine Zeichenfolge erwartet. Um dies zu umgehen, ohne dynamisches SQL zu verwenden, ist die Verwendung der CHARINDEX
-Funktion:
<code class="language-sql">DECLARE @Ids varchar(50); SET @Ids = ',1,2,3,5,4,6,7,98,234,'; --Note the added commas SELECT * FROM sometable WHERE CHARINDEX(',' + CAST(tableid AS VARCHAR(8000)) + ',', @Ids) > 0;</code>
Diese verbesserte Abfrage fügt geschickt Kommas an beiden Enden der @Ids
-Zeichenfolge hinzu. CHARINDEX
sucht dann nach einer durch Kommas getrennten Version von tableid
innerhalb der geänderten @Ids
-Zeichenfolge. Dies gewährleistet exakte Übereinstimmungen und verhindert Teilübereinstimmungen, die zu falschen Ergebnissen führen könnten. Es werden nur Zeilen zurückgegeben, in denen das tableid
in der durch Kommas getrennten Liste gefunden wird.
Das obige ist der detaillierte Inhalt vonWie übergebe ich eine durch Kommas getrennte Zeichenfolge 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!