SQL WHERE 句のカンマ区切り文字列を IN リストに変換します
質問:
カンマ区切りの文字列をストアド プロシージャのパラメータとして保存する場合、その文字列を WHERE 句の正しい IN リストに変換する必要があります。
ベスト プラクティス ソリューション:
この変換を効率的に実行するには、カスタム SQL Server 関数を作成します。
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) f, charindex(@delimiter, @param) t, 1 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
使用法:
WHERE 句に次のステートメントを入力します:
SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))
パフォーマンスの比較:
この関数は、XML ベースのセグメンテーション方法と比較して高いパフォーマンスを提供します。大規模なテスト データセットを使用します:
パフォーマンスの違いは異なる場合があり、カスタム分割関数の効率が際立っています。
以上がカンマ区切り文字列を SQL IN リストに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。