Sql 如何检查某些表是否为空?
如何在一次查询中检查某些数据表(例如“tableA”、“tableB”和“tableC”)是否为空(SQL Server) 预期结果: 对我来说最重要的是有一个结果Sql 如何检查某些表是否为空?,sql,sql-server,Sql,Sql Server,如何在一次查询中检查某些数据表(例如“tableA”、“tableB”和“tableC”)是否为空(SQL Server) 预期结果: 对我来说最重要的是有一个结果 它可以是true(如果所有表都为空)或false 另一种可能性是所有表上所有项的总和,如0(如果所有表都为空)或n 示例 数据库中有三个表:表1、表2和表3 所有的桌子都是空的。-->预期结果:0 表1有3行,表2有0行,表3有1行。-->预期结果:4 您可以使用union all从表中获取计数: select 'a', cou
- 它可以是true(如果所有表都为空)或false
- 另一种可能性是所有表上所有项的总和,如0(如果所有表都为空)或n
您可以使用
union all
从表中获取计数:
select 'a', count(*) from a union all
select 'b', count(*) from b union all
select 'c', count(*) from c;
但是,最快的方法是使用exists
:
select (case when not exists (select 1 from a) then 1 else 0 end) as a_is_empty,
(case when not exists (select 1 from b) then 1 else 0 end) as b_is_empty,
(case when not exists (select 1 from c) then 1 else 0 end) as c_is_empty
编辑:
如果需要三个表中的总行数,只需将它们相加:
select sum(cnt)
from (select 'a', count(*) as cnt from a union all
select 'b', count(*) from b union all
select 'c', count(*) from c
) abc;
如果您需要准确、最新的结果,我会小心使用系统表进行此操作。系统表在静态环境中非常好,在静态环境中,表不会发生变化,但我怀疑您的环境更具动态性。您也可以使用此DMV,它将仅从缓存中查询计数
SELECT SUM(row_count) AS rows
FROM sys.dm_db_partition_stats
where object_name(object_id) in ('table1','tab1e2')
group by OBJECT_NAME(object_id)
根据问题更新:
;with cte
as
(SELECT SUM(row_count) AS rows
FROM sys.dm_db_partition_stats
where object_name(object_id) in ('table1','tab1e2')
group by OBJECT_NAME(object_id))
select sum(rows) as rows from cte
希望下面的查询能帮助你
SELECT
SCHEMA_NAME(SOS.SCHEMA_ID) + '.' + (SOS.NAME) AS [Table Name]
, (SPS.Rows) AS [Row Count]
, [Heap / Clustered Table] = CASE SPS.INDEX_ID WHEN 0 THEN 'HEAP' ELSE 'CLUSTERED' END
FROM
sys.objects AS SOS
INNER JOIN sys.partitions AS SPS
ON SOS.object_id = SPS.object_id
WHERE
SOS.type = 'U'
AND SPS.index_id < 2
and SPS.Rows =0
ORDER BY [Table Name]
选择
模式名称(SOS.SCHEMA_ID)+'.+(SOS.NAME)为[表名]
,(SPS.行)作为[行计数]
,[Heap/Clustered Table]=案例SPS.INDEX_ID,当0之后为'Heap'或'Clustered'结束时
从…起
系统对象作为SOS
内部将sys.partitions连接为SP
在SOS.object\u id=SPS.object\u id上
哪里
SOS.type='U'
和SPS.index_id<2
和SPS.Rows=0
按[表格名称]排序
如果我的帖子对你有帮助,请记下我的答案。
当做
ChetanV请编辑您的问题并显示您想要的结果。使用
从@psur>中选择前1名可能会更快。那应该没什么区别。存在
应该在第一条记录时自动停止。@GordonLinoff:这不是我需要的。请参阅我编辑的问题-我描述了预期结果。非常感谢。这一次几乎是预期的结果。最后,我希望得到“行”列的总和。不完全是。。。这个函数返回与表一样多的行,表示每个表有多少行。我希望将所有表的总和显示在一行结果中。请使用一些示例数据和预期结果更新您的问题。好的,我刚刚添加了一个详细的示例。非常感谢。