SQL Server で変数を宣言する IN 句を使用した IN 句の処理
宣言された変数を使用して IN 句に複数の値を挿入すると、特に変数に数値以外の文字が含まれている場合、エラーが発生する可能性があります。この問題を調査し、解決策について話し合いましょう。
エラーを理解しています
指定された SQL ステートメント内:
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = 3 + ', ' + 4 + ' ,' + '22' SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
エラー メッセージは、カンマとスペースを含む VARCHAR 値から整数 (INT) への変換が失敗したことを示します。これは、IN 句が数値範囲を想定しており、カンマやスペースが有効な整数として認識されないためです。
テーブル変数を使用して動的リストを処理する
この制限を克服する 1 つの方法は、テーブル変数を使用して IN 句の値のリストを保存することです。これにより、テーブル変数に複数の値を挿入し、それを単一のエンティティとして扱うことができます。
テーブル変数を作成して設定します
除外される値のリストを表すテーブル変数を宣言します:
<code class="language-sql">DECLARE @ExcludedList TABLE (Id INT)</code>
ループまたはその他の適切な方法を使用してテーブル変数に値を挿入します:
<code class="language-sql">INSERT INTO @ExcludedList VALUES (3) INSERT INTO @ExcludedList VALUES (4) INSERT INTO @ExcludedList VALUES (22)</code>
IN 句でテーブル変数を使用する
IN 句でテーブル変数を参照できるようになり、値の整数への変換が自動的に処理されます。
<code class="language-sql">SELECT * FROM A WHERE Id NOT IN (SELECT Id FROM @ExcludedList)</code>
この変更されたステートメントは、テーブル A から除外リストにない行を返すため、変換エラーが回避されます。
以上がSQL Server で IN 句を含む宣言された変数を効果的に使用して、変換エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。