gpt4 book ai didi

sql-server - SQL- COUNT 数据库中所有表中具有 WHERE 条件的所有行

转载 作者:搜寻专家 更新时间:2023-10-30 23:41:12 24 4
gpt4 key购买 nike

我需要一个查询来计算数据库中所有表中的所有行(使用 WHERE 条件),其中 table_names 是未知的。原因是:我有一个“alarm_logging_system”,它每个月左右创建一个新的“存档”表,并自动将其命名为“AlarmLog(最后一个事件警报的时间戳)”

所以我需要一个动态搜索数据库中存在的所有表的查询,计算具有 WHERE 条件的列中的所有行,并返回一个值。

例如,我想获取所有事件警报,本月、上个月等。或特定时间范围。

这是我为获取上个月所有事件警报的计数而编写的查询示例

SELECT COUNT(ConditionActive)  
FROM (whole database)???
WHERE (Acked=0 AND ConditionActive = 1)
AND (EventTime >= DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0))
AND [EventTime] <= DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))))
AS ACTIVE_LAST_MONTH

那么我需要的是查询、存储过程还是动态 SQL 查询?

所有表都具有相同的架构和列。

感谢所有帮助!

最佳答案

这应该证明为什么通常不认为制作同一个表的多个副本然后从整个集合中聚合数据是一种好的做法。这不是关系数据库设计的工作方式。

这是未经测试的,因为我没有任何地方可以使用您的 table ,但这应该可以。

declare @SQL nvarchar(max) = ''

--This get a result set of the count for all tables.
select @SQL = @SQL + 'select count(ConditionActive) as MyCount
from [' + t.name + ']
where Acked = 0
AND ConditionActive = 1
AND EventTime >= DATEADD(month, -1, DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0))
and [EventTime] <= DATEADD(day, -1, DATEADD(month, DATEDIFF(month, 0, GETDATE()),0)) UNION ALL'
from sys.tables t

--Now we need the sum of all counts
select @SQL = 'Select sum(MyCount) from (' + LEFT(@SQL, LEN(@SQL) - 10) + ') as x'

select @SQL

--uncomment the line below when you are confident that the dynamic sql is correct.
--exec sp_executesql @SQL

--编辑--我冒昧地扩展了 DATEADD 函数中的快捷方式。快捷方式很难记住,您同时使用了 mm 和 m,它们都表示月份。通常更好的方法是拼出单词以消除任何歧义。

关于sql-server - SQL- COUNT 数据库中所有表中具有 WHERE 条件的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34956239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com