0

クエリ内の列の名前を変更することは、すべての SQL 管理者/開発者にとって非常に基本的で一般的なタスクです。しかし、今日、数百のテーブルのテーブル名を選択し、以前に選択した各テーブルの最新のエントリと一致させる必要があるという問題に直面しました。

結局、私はこのようなものが欲しかった:

event_id | date       | tbl_name
==================================
68       | 31-12-1998 | tb_x
56       | 31-11-2001 | tb_y

event_id と date を取得するのは動的クエリで十分簡単でしたが、列tbl_nameを追加しようとすると失敗します。

手順は簡単です。

SELECT @sql = @sql + 'SELECT event_id, date, '+QUOTENAME(TABLE_NAME)+' as tbl_name FROM ' + TABLE_NAME + ' UNION ' 
FROM (SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME not like 'event_%') AS t
...
exec (@sql)

最終的に、クエリは次のようになります。

SELECT event_id, date, 'event_b559453b' as tbl_name
FROM event_b559453b
UNION
...
SELECT event_id, date, 'event_b03c4520' as tbl_name
FROM event_b559453b

(私にとって)奇妙なことは、最後のクエリを実行すると期待どおりに動作するが、exec @sqlを使用すると、 Invalid column name 'event_????'というエラーで失敗することです。. 列の名前変更が行われない理由と、これを回避する方法があるかどうかを誰かに教えてもらえますか?

前もって感謝します。

注: 私は SQL Server 2012 を使用していますが、これには比較的慣れていません!

4

2 に答える 2