求助:SQL Server环境下统计所有表行数的SQL语句
SQL Server统计所有表总行数的适配方案
你遇到的错误是因为Oracle用||做字符串拼接,而SQL Server里字符串拼接用+,而且系统表也不一样——Oracle的user_tables对应SQL Server的sys.tables,还要注意SQL Server里表需要带上架构名(比如默认的dbo),避免同名表冲突。
这里给你两种适配方案:
方案1:生成每个表的COUNT语句
运行下面的SQL会输出每一张表的统计语句,你可以复制这些语句执行,或者批量运行:
SELECT 'SELECT ''' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ''' AS TableName, COUNT(*) AS RowCount FROM ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ';' AS CountQueries FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id;
用QUOTENAME是为了兼容带特殊字符(比如空格、关键字)的表名/架构名,避免语法错误。
方案2:一次性生成所有表的统计结果
如果想直接得到所有表的行数汇总,用动态SQL一次性执行:
DECLARE @SQL NVARCHAR(MAX) = ''; SELECT @SQL += 'UNION ALL SELECT ''' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ''' AS TableName, COUNT(*) AS RowCount FROM ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ' ' FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id; -- 移除开头多余的UNION ALL SET @SQL = STUFF(@SQL, 1, 10, ''); EXEC sp_executesql @SQL;
内容的提问来源于stack exchange,提问作者summerisbetterthanwinter
相关产品推荐
相关产品推荐

