ホームページ > データベース > mysql チュートリアル > 動的 SQL を使用せずにカンマ区切り文字列を SQL Server の IN 関数に渡すにはどうすればよいですか?

動的 SQL を使用せずにカンマ区切り文字列を SQL Server の IN 関数に渡すにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-22 04:21:09
オリジナル
196 人が閲覧しました

How to Pass a Comma-Delimited String to SQL Server's IN Function Without Dynamic SQL?

動的 SQL の回避: SQL Server の IN 句でのカンマ区切り値の処理

カンマ区切りの文字列を SQL Server の IN 関数に直接渡すと、型変換エラーが発生することがよくあります。 一般的なシナリオを調べてみましょう:

DECLARE @Ids varchar(50);
SET @Ids = '1,2,3,5,4,6,7,98,234';

SELECT * 
FROM sometable 
WHERE tableid IN (@Ids);
ログイン後にコピー

IN 句は文字列ではなく個々の整数値を想定しているため、これにより変換エラーが発生します。 動的 SQL を使用せずにこれを回避するには、CHARINDEX 関数を使用するより堅牢な方法があります。

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;
ログイン後にコピー

この改良されたクエリでは、@Ids 文字列の両端にカンマが巧みに追加されています。 次に、CHARINDEX は、変更された tableid 文字列内で @Ids のカンマ区切りバージョンを検索します。 これにより、正確な一致が保証され、不正確な結果につながる可能性のある部分的な一致が防止されます。 カンマ区切りリスト内で tableid が見つかった行のみが返されます。

以上が動的 SQL を使用せずにカンマ区切り文字列を SQL Server の IN 関数に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート