ホームページ >データベース >mysql チュートリアル >SQL クエリでテーブル名変数を使用するにはどうすればよいですか?
質問:
変数に格納されたテーブル名 (「@tablename」など) を使用してクエリを実行しようとすると、テーブル変数「@tablename」を宣言する必要があることを示すエラーが表示されます。
解決策:
質問に示されているような静的クエリでは、テーブル名と列名は静的である必要があります。テーブル名が動的に設定される動的クエリの場合、完全な SQL を動的に生成し、sp_executesql
を使用して実行する必要があります。
例:
異なるデータベースの同じテーブルのデータを比較するとします。静的クエリは次のようになります:
<code class="language-sql">SELECT * FROM [DB_ONE].[dbo].[ACTY] EXCEPT SELECT * FROM [DB_TWO].[dbo].[ACTY]</code>
このクエリを動的にするには、スキーマとテーブル名を変数として設定できます:
<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>
sp_executesql
を使用すると、動的に生成されたSQLを実行できます。
その他の注意事項:
動的クエリには慎重な検討とメンテナンスが必要です。このようなクエリをコードに実装する前に、動的 SQL の詳細をよく理解しておくことをお勧めします。
以上がSQL クエリでテーブル名変数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。