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