Heim >Datenbank >MySQL-Tutorial >Wie übergebe ich eine durch Kommas getrennte Zeichenfolge an die IN-Funktion von SQL Server ohne dynamisches SQL?

Wie übergebe ich eine durch Kommas getrennte Zeichenfolge an die IN-Funktion von SQL Server ohne dynamisches SQL?

Linda Hamilton
Linda HamiltonOriginal
2025-01-22 04:21:09145Durchsuche

How to Pass a Comma-Delimited String to SQL Server's IN Function Without Dynamic 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:

eine robustere Methode
<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn