紹介:
静的クエリでテーブル名として変数を使用しようとすると、「テーブル変数を宣言する必要があります」というエラーが発生します。この記事では、テーブル名を動的に設定する正しい方法について説明します。
解決策:
静的クエリの場合、テーブル名と列名は静的である必要があります。ただし、動的クエリでは完全な SQL ステートメントを動的に生成でき、sp_executesql
を使用して実行できます。
次のシナリオを考えてみましょう:
<code class="language-sql">declare @tablename varchar(50) set @tablename = 'test' select * from @tablename</code>
テーブル名が動的に割り当てられるため、この静的クエリは失敗します。
動的クエリの例:
次のスクリプトは、動的クエリを使用して 2 つのデータベースのデータを比較する方法を示しています。
<code class="language-sql">declare @schema sysname; declare @table sysname; declare @query nvarchar(max); set @schema = 'dbo' set @table = 'ACTY' set @query = ' SELECT * FROM [DB_ONE].' + QUOTENAME(@schema) + '.' + QUOTENAME(@table) + ' EXCEPT SELECT * FROM [DB_TWO].' + QUOTENAME(@schema) + '.' + QUOTENAME(@table); EXEC sp_executesql @query</code>
この例では、テーブル名とスキーマが動的であるため、異なるデータベース内のデータを簡単に比較できます。
注:
動的クエリには慎重な検討とメンテナンスが必要です。ベスト プラクティスについて学ぶには、「動的 SQL の呪いと祝福」などのリソースを参照することをお勧めします。
以上がSQL クエリで変数をテーブル名として使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。