T-SQL - 对具有相同列名的多个表进行操作的查询
T-SQL - Query that operates on multiple tables that have the same column name
我正在尝试对 SQL 服务器数据库进行一些调查和报告,我的目标看起来很简单,但我的大脑就是没有把它放在一起。
目标是找到每个 table 中在特定日期之前创建的记录总数。数据库中的大多数(但不是全部)table 有一个列 "created",所以我只需要找到所有具有该列的 table 和 运行 上的查询他们。
我可以轻松找到所有合适的 table 名称:
select table_name from INFORMATION_SCHEMA.COLUMNS where column_name = 'created'
下一步是将其与:
select count(*) from ... where created <= date_i_care_about
有没有不用循环的简单方法?
如果这是一次性工作(不用于自动化),我想你可以复制结果
下面的查询并执行它:
DECLARE @date AS DATETIME
SET @date = '2014-01-01'
SELECT 'SELECT ''' + OBJECT_NAME(object_id) + ''' AS [Table], COUNT(*) AS [Count] FROM [' + OBJECT_NAME(object_id) + '] WHERE [created] <= ''' + CONVERT(VARCHAR, @date, 20) + '''' FROM sys.columns WHERE name = 'created'
希望这对您有所帮助...
我正在尝试对 SQL 服务器数据库进行一些调查和报告,我的目标看起来很简单,但我的大脑就是没有把它放在一起。
目标是找到每个 table 中在特定日期之前创建的记录总数。数据库中的大多数(但不是全部)table 有一个列 "created",所以我只需要找到所有具有该列的 table 和 运行 上的查询他们。
我可以轻松找到所有合适的 table 名称:
select table_name from INFORMATION_SCHEMA.COLUMNS where column_name = 'created'
下一步是将其与:
select count(*) from ... where created <= date_i_care_about
有没有不用循环的简单方法?
如果这是一次性工作(不用于自动化),我想你可以复制结果 下面的查询并执行它:
DECLARE @date AS DATETIME
SET @date = '2014-01-01'
SELECT 'SELECT ''' + OBJECT_NAME(object_id) + ''' AS [Table], COUNT(*) AS [Count] FROM [' + OBJECT_NAME(object_id) + '] WHERE [created] <= ''' + CONVERT(VARCHAR, @date, 20) + '''' FROM sys.columns WHERE name = 'created'
希望这对您有所帮助...