ストアド プロシージャが、ユーザー名やアカウント番号などの複数の値を表すコンマ区切りの文字列パラメーターを受け取ると仮定します。これらの値に基づいて行をフィルタリングするには、WHERE 句で IN リストを作成する必要があります。
SQL Server 2005 以降で推奨されるアプローチは、次のようなテーブル値関数を使用することです。
<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>
この関数を使用して文字列を解析して IN のリストを作成するには、サブクエリを作成します。
<code class="language-sql">SELECT * FROM yourtable WHERE account IN (SELECT val FROM dbo.f_split(@account, ','))</code>
別の方法として、LIKE 演算子を使用した、単純ではありますが効率の悪いパターン マッチング方法を使用することもできます。
<code class="language-sql">WHERE account LIKE '%,' + @account + '%,</code>
対照的に、f_split 関数を利用すると、特に大規模なデータセットを扱う場合にパフォーマンスが向上します。
以上がSQL IN リストのカンマ区切り文字列を効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。