加入多个表的查询

时间:2017-03-08 20:26:51

标签: sql sql-server join

我想知道大型数据库中表格的所有ces_status ='FINISHED',其中表格的创建日期为今天。

这告诉我今天创建的所有表格

SELECT [name] AS [TableName], [create_date] AS [CreatedDate] 
FROM sys.tables where create_date > '2017-03-08 00:00:00.000'

对于这些表中的任何一个,我可以找到有多少表已完成

select COUNT(*) 
from tbl_IADPRDSL1_15_04_05_140 with (nolock) 
WHERE ces_status='FINISHED'

是否可以将这两者组合成一个连接查询,以便在所有这些表中给出该数字。我是前端开发人员,我尝试过查询构建器,但我没有运气。

2 个答案:

答案 0 :(得分:0)

两个步骤:

1)运行:

SELECT concat('SELECT * FROM ', [name], ' WHERE CES_Status=''FINISHED'' UNION ALL ')
FROM sys.tables where create_date > '2017-03-08 00:00:00.000'

获取上述查询的结果并粘贴下面的替换。同时删除最后一个UNION ALL语句。

SELECT COUNT(*) FROM (<results>)

如果必须一步完成,那么一切都必须是动态SQL,并且更具挑战性。

答案 1 :(得分:0)

如果您想一步完成,您需要增强xQbert答案,如下所示

declare @sql nvarchar(max)
declare @date datetime
set @date = '2017-02-08 00:00:00.000'

SELECT @sql  = COALESCE(@Sql + ' UNION ALL ', '') + concat(' SELECT Count(*), '''+[name]+''' as TableName FROM [', schema_name(schema_id) + '].[' + [name], '] with (nolock) WHERE ces_status=''FINISHED'' ')
FROM sys.tables where create_date > @date

Exec sp_executesql @sql

这只是一步。