ホームページ >データベース >mysql チュートリアル >動的 SQL を使用せずにカンマ区切りの値を SQL Server の IN 関数に渡す方法

動的 SQL を使用せずにカンマ区切りの値を SQL Server の IN 関数に渡す方法

Susan Sarandon
Susan Sarandonオリジナル
2025-01-22 03:56:11233ブラウズ

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

動的 SQL の回避: SQL Server の IN 句にカンマ区切り値を渡す

カンマ区切りの文字列を SQL Server の IN 関数に直接渡すと、型変換エラーが発生することがよくあります。 例:

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

SELECT * FROM sometable
WHERE tableid IN (@Ids);</code>

IN 句は文字列ではなく個々の整数値を期待しているため、これにより「変換に失敗しました」エラーが生成されます。

動的 SQL を使用しないソリューション

動的 SQL の落とし穴を回避する堅牢な代替方法には、CHARINDEX 関数を活用することが含まれます。

<code class="language-sql">DECLARE @Ids varchar(50);
SET @Ids = ',1,2,3,5,4,6,7,98,234,'; -- Note the leading and trailing commas

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

入力文字列 @Ids とキャスト tableid の両方の前後にカンマを追加することで、カンマ区切りの文字列内で個々の値が正しく識別されるようになります。 CHARINDEX 関数は、変更された tableid 文字列内の各 @Ids の存在を効率的にチェックします。 これは、動的 SQL を必要とせずに、IN 句の動作を効果的に模倣します。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。