Heim >Datenbank >MySQL-Tutorial >Wie übergebe ich durch Kommas getrennte Werte effizient an eine SQL Server-IN-Funktion?

Wie übergebe ich durch Kommas getrennte Werte effizient an eine SQL Server-IN-Funktion?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-22 04:25:09584Durchsuche

How to Efficiently Pass Comma-Delimited Values to a SQL Server IN Function?

Übergeben Sie getrennte Werte an die SQL Server IN-Funktion

Die Übergabe von durch Kommas getrennten Zeichenfolgenwerten an die IN-Funktion in SQL Server kann eine Herausforderung sein. Die direkte Verwendung der IN-Funktion, die durch Trennzeichen getrennte Zeichenfolgen enthält, führt zu Konvertierungsfehlern.

Option 1: Dynamisches SQL

Eine Möglichkeit ist die Verwendung von dynamischem SQL, mit dem Sie IN-Klauseln dynamisch erstellen können. Diese Methode wird jedoch aus Sicherheits- und Leistungsgründen nicht empfohlen.

Option 2: String-Operation

Eine effizientere und sicherere Lösung besteht darin, die durch Trennzeichen getrennte Zeichenfolge in ein für die IN-Funktion akzeptables Format zu manipulieren. Eine Möglichkeit besteht darin, mit der Funktion CHARINDEX() zu prüfen, ob jeder Wert in der durch Trennzeichen getrennten Zeichenfolge mit einem Spaltenwert in der Tabelle übereinstimmt:

<code class="language-sql">DECLARE @Ids varchar(50) = ',1,2,3,5,4,6,7,98,234,'

SELECT * 
FROM sometable
WHERE CHARINDEX(','+CAST(tableid AS VARCHAR(8000))+',', @Ids) > 0</code>

Diese Methode erfordert kein dynamisches SQL, wodurch Sicherheits- und Leistungsvorteile in Einklang gebracht werden.

Einfache Lösung

Für diejenigen, die eine weniger elegante, aber bequemere Lösung suchen, gibt es einen einfachen Trick:

<code class="language-sql">DECLARE @Ids varchar(50) = ',1,2,3,5,4,6,7,98,234,'

SELECT * 
FROM sometable
WHERE ',' + CONVERT(VARCHAR, tableid) + ',' LIKE '%,' + @Ids + '%';</code>

Obwohl diese Methode nicht so effizient ist wie die CHARINDEX()-Methode, bietet sie eine schnelle und einfache Alternative.

Das obige ist der detaillierte Inhalt vonWie übergebe ich durch Kommas getrennte Werte effizient an eine SQL Server-IN-Funktion?. 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