如何获取数据库中存在的所有视图的列表及其记录计数?

时间:2018-11-12 13:40:59

标签: sql-server

出于验证目的,我想获取数据库中存在的所有视图的列表及其对应的记录数。有人可以帮我在SQL Server Management Studio中查询吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,无法通过读取系统表来检索视图返回的行数,因为该信息未保存在元数据中。唯一可行的方法是实际执行select COUNT(*) from view_name,因为视图可能包含复杂的逻辑,并且视图返回的数据实际上已分配给其他对象(例如表)。例如,对于表,您可以从sys.partitions DMV中获取此行数。

一种解决方法是选择视图列表并生成动态查询,该查询将在每个视图中执行select count(*)并将结果组合在一起,但这可能是非常繁琐的查询。

无论如何,这是一个示例,该示例如何返回数据库中的表('T')和视图('V')列表。对于表,您还将获得行计数,而对于视图,此列将为空。然后更改where子句以仅返回视图(where o.type = 'V')并执行查询。复制/粘贴新查询窗口中的最后一列(删除所有的并集)并执行它以返回每个视图的行数(注意:这可能需要很长时间,并且会对您的服务器产生重大影响!)。

select o.name, sum(p.rows) as RowsCount, o.type, concat('select ''', o.name, ''' as ObjectName, count(*) as RowsCount from ', o.name, ' union all ')
from sys.objects o
left join sys.partitions p on p.object_id = o.object_id
where o.type in ('U', 'V')
group by o.name, o.type
order by o.name