【发布时间】:2012-01-10 19:24:23
【问题描述】:
我正在尝试制作一个自定义视图,以获取数据库所有视图和表的行数。
在 SQL Server 中获取表的计数是该死的
SELECT TABLE_SCHEMA,
TABLE_NAME = TABLES.TABLE_NAME,
RECORD_COUNT = MAX(SYSINDEXES.ROWS)
FROM SYS.SYSINDEXES "SYSINDEXES",
INFORMATION_SCHEMA.TABLES "TABLES"
WHERE TABLES.TABLE_NAME = OBJECT_NAME(SYSINDEXES.ID)
AND TABLES.TABLE_TYPE = 'BASE TABLE'
GROUP BY TABLES.TABLE_SCHEMA,
TABLES.TABLE_NAME
现在,我需要获取 VIEWS 的行数
我觉得唯一的方法是从视图中计算行数
即count(*) from view_name
但是,我找不到一种方法来获取视图的行数以及 view_name、table_schema 等。
这方面的任何进展都会有所帮助。
【问题讨论】:
-
你说的是索引视图还是所有视图?
-
所有观点 .... @Martin Smith
-
SELECT COUNT(*) ...是唯一的方法。 -
是的,我就是这么想的,但我怎么能把 TABLE_NAME|TABLE_ROWCOUNT 放在一边……加入他们是不可能的。
-
不得不删除我的解决方案,这可能会变得丑陋...我会发布另一个解决方案,但如果我自己这么说,那就太可怕了。它的要点是创建一个临时表来存储名称并遍历每个名称并为每个视图获取一个 SELECT COUNT(*)。它涉及一些神秘的
EXEC语句,对我来说不是最好的解决方案。正如 fermat 所说,或者接近他所说的,我对这个问题有一个优雅的解决方案——但边距太小,无法展示给你看。在我的情况下,这是同一件事,这个解决方案是肮脏的发布:)。