【问题标题】:How to get row counts from each tables in a DB based on condition如何根据条件从数据库中的每个表中获取行数
【发布时间】:2021-06-17 00:22:05
【问题描述】:

我在数据库中有多个表(比如 x_db),并且所有表都有一个具有日期值的公共列(比如列 'date')。 我想检索数据库 x_db 中每个表的行数,其中列 'date' 的值大于特定值。

【问题讨论】:

  • @Larnu - 我想不出查询来做到这一点,需要一个查询来一次从数据库中的所有表中获取计数。你能帮忙吗
  • Stack Overflow 不是免费的编码服务,@Pawan,也不是帮助论坛; Why is “Can someone help me?” not an actual question? 如果您无法编写查询,您为实现目标做了哪些研究?说的研究你不明白怎么办?实现这一点的唯一方法是使用动态 SQL,这不是 SQL 新手应该感到有趣的事情。也许这是一个设计缺陷或XY Problem
  • 尝试重写您的问题并添加更多信息和您之前尝试过的脚本。

标签: sql sql-server database select


【解决方案1】:

为此,您需要动态 SQL。它可能容易出错且难以调试。

  • 确保通过sp_executesql传递参数
  • 任何不能传入的东西一定要引用quotename
declare @date datetime = '2021-01-01';

declare @sql nvarchar(max) = 
(
select string_agg(
N'SELECT ' quotename(schema_name(t.schema_id), '''') + N'.' + quotename(t.name, '''') + N' AS tableName, COUNT(*) AS countRows
FROM ' quotename(schema_name(t.schema_id)) + N'.' + quotename(t.name) + N'
WHERE date > @date
', cast(N'
UNION ALL
' AS nvarchar(max)))
from sys.tables t
join sys.columns c on c.object_id = t.object_id and c.name = 'date'
group by t.schema_id, t.name
);

EXEC sp_executesql @sql, N'@date datetime', @date = @date;

将类型更改为datetime2 或任何必要的内容

【讨论】:

    猜你喜欢
    • 2017-10-26
    • 2020-09-24
    • 1970-01-01
    • 2014-02-18
    • 2014-12-17
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多