ホームページ >データベース >mysql チュートリアル >SQL クエリでテーブル名変数を使用するにはどうすればよいですか?

SQL クエリでテーブル名変数を使用するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-23 06:31:09958ブラウズ

How Can I Use a Table Name Variable in a SQL Query?

変数をテーブル名として使用する

質問:

変数に格納されたテーブル名 (「@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 サイトの他の関連記事を参照してください。

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