SQL Server での IN 句と変数の宣言: 型変換エラーの回避
場合によっては、宣言された変数で表される複数の値を IN 句に含める必要がある場合があります。この手法により、これらの値を複雑なストアド プロシージャ内で集中管理できるため、繰り返し更新する必要がなくなります。ただし、このようなクエリを実行する場合にはいくつかの課題があります。
質問:
次のコード スニペットは、この問題の例を示しています。
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = '3,4,22' SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
エラー: varchar 値を int 型に変換中に変換に失敗しました。
エラーの理由:
このエラーは、クエリが整数列 (Id) をカンマ区切り値を含む文字列変数 (@ExcludedList) と比較しようとしているために発生します。 IN 句は入力として整数を想定しますが、宣言された変数には文字列が含まれます。
解決策:
この課題を克服するには、変数を宣言する代わりにテーブル変数を使用することを検討してください。テーブル変数は複数の値を表形式で動的に保存できるため、IN 句での使用が容易になります。
<code class="language-sql">DECLARE @your_list TABLE (list INT) INSERT into @your_list (list) VALUES (3),(4),(22) SELECT * FROM A WHERE Id NOT IN (select list from @your_list)</code>
テーブル変数を使用することにより、クエリで整数が正確に比較され、変換エラーが解決されるようになりました。
このアプローチにより、IN 句で複数の値を処理する際の柔軟性と効率が向上します。これにより、リストに動的に値を入力し、これらの値の管理を 1 か所で集中化できるため、必要に応じてリストを更新または変更することが容易になります。
以上が変数を含む SQL Server IN 句: 変換エラーを回避するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。