您的位置:首页 > 数据库

Transact-SQL 示例 - 查询某个数据库内的所有表的记录行数及其总和

2011-07-25 20:05 465 查看
直接上SQL脚本

CREATE PROCEDURE dbo.ShowAllTableRows
@databaseName NVARCHAR(100)
AS
BEGIN
--declare @databaseName nvarchar(100)
--set @databaseName = 'tempdb'
DECLARE @dynamicSql NVARCHAR(4000)
SET @dynamicSql =
N'USE ' + @databaseName + N';
SET NOCOUNT ON;
DECLARE cur CURSOR LOCAL
FORWARD_ONLY READ_ONLY
FOR
SELECT
''['' + s.name + '']''
+ ''.['' + t.name + '']'' TableName
FROM
sys.tables t INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id;

OPEN cur

--IF EXISTS (SELECT object_id(N''tempdb..#table''))
--   DROP TABLE #table

CREATE TABLE #table (
[TableName] NVARCHAR(300) PRIMARY KEY,
[Rows] INT
)

DECLARE @tableName VARCHAR(100)

FETCH NEXT FROM cur
INTO @tableName

WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @sql NVARCHAR(2000)
SET @sql = ''INSERT INTO #table ([TableName], [Rows]) VALUES (''
SET @sql = @sql + '''''''' + @tableName + '''''', ''
+ ''(SELECT COUNT(*) FROM '' + @tableName + ''))''

exec sp_executesql @sql
--print @sql

FETCH NEXT FROM cur
INTO @tableName
END

CLOSE cur
DEALLOCATE cur

SELECT * FROM #table ORDER BY [Rows] DESC
DECLARE @allRows INT;
SET @allRows = (SELECT SUM([Rows]) FROM #table);
PRINT @allRows;';

--PRINT @dynamicSql;
exec sp_executesql @dynamicSql
END


执行: dbo.ShowAllTableRows 'AdventureWorks' 的效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: