对于任何 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,对此我比较陌生!