Angenommen, die gespeicherte Prozedur empfängt einen durch Kommas getrennten Zeichenfolgenparameter, der mehrere Werte darstellt, z. B. Benutzername oder Kontonummer. Um Zeilen basierend auf diesen Werten zu filtern, müssen wir in der WHERE-Klausel eine IN-Liste erstellen.
Der empfohlene Ansatz in SQL Server 2005 und höher ist die Verwendung von Tabellenwertfunktionen, zum Beispiel:
<code class="language-sql">CREATE FUNCTION [dbo].[f_split]( @param NVARCHAR(MAX), @delimiter CHAR(1) ) RETURNS @t TABLE ( val NVARCHAR(MAX), seq INT ) AS BEGIN SET @param += @delimiter; WITH a AS ( SELECT CAST(1 AS BIGINT) AS f, CHARINDEX(@delimiter, @param) AS t, 1 AS seq UNION ALL SELECT t + 1, CHARINDEX(@delimiter, @param, t + 1), seq + 1 FROM a WHERE CHARINDEX(@delimiter, @param, t + 1) > 0 ) INSERT @t SELECT SUBSTRING(@param, f, t - f), seq FROM a OPTION (MAXRECURSION 0); RETURN; END;</code>
Um diese Funktion zum Parsen einer Zeichenfolge in eine Liste von INs zu verwenden, erstellen Sie eine Unterabfrage:
<code class="language-sql">SELECT * FROM yourtable WHERE account IN (SELECT val FROM dbo.f_split(@account, ','))</code>
Alternativ können Sie eine einfache, aber weniger effiziente Methode des Mustervergleichs mit dem LIKE-Operator verwenden:
<code class="language-sql">WHERE account LIKE '%,' + @account + '%,</code>
Im Gegensatz dazu kann die Verwendung der f_split-Funktion eine bessere Leistung bieten, insbesondere beim Umgang mit großen Datenmengen.
Das obige ist der detaillierte Inhalt vonWie kann ich durch Kommas getrennte Zeichenfolgen für SQL IN-Listen effizient analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!