我正在尝试创建一个自定义视图,以获取数据库所有视图和表的行数。
在 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 的行数
我觉得唯一的方法是计算视图中的行数
IE。count(*) from view_name
但是,我找不到一种方法来获取视图的行数以及 view_name、table_schema 等。
这方面的任何进展都会有所帮助。
嗯,它不是很漂亮,但这应该可以解决问题。
这适用于单个数据库,因为我使用系统视图“all_views”来获取数据。我确信如果您想要其他东西,它可以进行调整。
我还通过“schema_id”限制了要返回计数的视图。您可以看看这个并确定什么最适合您。
最后,我刚刚将结果输出出来,以便您在 Management Studio 中运行时可以查看它们。您可能希望将结果插入到表或其他内容中。如果是这样,只需将动态查询从选择更改为插入即可。
因此,无需进一步告别:
SET NOCOUNT ON
DECLARE @ViewName AS nVarChar(128)
, @Query AS nVarChar(500)
/* Declare Cursor */
DECLARE Cur_Views CURSOR
FOR
SELECT name
FROM [sys].[all_views] x
WHERE x.schema_id = 1
-- Loop through the views.
OPEN Cur_Views
-- Fetch the first view
FETCH NEXT FROM Cur_Views
INTO @ViewName
WHILE @@Fetch_Status = 0 BEGIN
-- Set up our dynamic sql
SELECT @Query = 'SELECT COUNT(*) AS [Count] FROM ' + @ViewName
-- Print the query we're executing for debugging purposes
-- PRINT @Query
-- Execute the dynamic query
EXECUTE(@Query)
-- Fetch subsequent views
FETCH NEXT FROM Cur_Views
INTO @ViewName
-- Loop back to the beginning
END -- WHILE @@Fetch_Status = 0 BEGIN
-- Close the cursor
CLOSE Cur_Views
-- Dispose of the cursor
DEALLOCATE Cur_Views
GO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)