我想知道大型数据库中表格的所有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'
是否可以将这两者组合成一个连接查询,以便在所有这些表中给出该数字。我是前端开发人员,我尝试过查询构建器,但我没有运气。
答案 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
这只是一步。