繁体   English   中英

与许多表联接查询

[英]Join query with many tables

我想知道大型数据库中表的创建日期为今天的所有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'

是否可以将两者结合成一个联接查询以在所有这些表中给我那个数字。 我是前端开发人员,尝试过查询生成器,但没有运气。

两步:

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,并且更具挑战性。

如果要一步一步完成,则需要如下增强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

这只是一步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM