回答
你可以尝试像this:
SELECT
[TableName] = so.name,
[RowCount] = MAX(si.rows)
FROM
sysobjects so,
sysindexes si
WHERE
so.xtype = 'U'
AND
si.id = OBJECT_ID(so.name)
GROUP BY
so.name
ORDER BY
2 DESC
Galwegian得到它差不多吧:-)对于SQL Server 2005和起来,我总是使用推荐“SYS。*”系统视图,而不是(即将弃用)的sysobjects和sysindexes表。
SELECT
t.NAME AS 'Table Name',
SUM(p.[Rows]) as 'Row Count'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
WHERE
t.NAME NOT LIKE 'dt%' AND
i.OBJECT_ID > 255 AND
i.index_id = 1
GROUP BY
t.NAME
ORDER BY
SUM(p.[Rows]) DESC
马克
我不记得在那里我得到了这一点,我敢肯定我没有写它,它肯定是矫枉过正,但它仍然是乐趣。
USE master
GO
SET NOCOUNT ON
DECLARE @EnumDBs TABLE ([id] INT IDENTITY, [sql] VARCHAR(1024), PRIMARY KEY ([id]))
CREATE TABLE #EnumTables ([id] INT IDENTITY, [db] SYSNAME, [owner] SYSNAME, [table] SYSNAME, PRIMARY KEY ([db], [owner], [table], [id]))
CREATE TABLE #TableMetrics ([id] INT IDENTITY, [db] SYSNAME NULL, [table] SYSNAME, [rows] INT, [reserved] VARCHAR(256), [data] VARCHAR(256), [index_size] VARCHAR(256), [unused] VARCHAR(256), PRIMARY KEY ([table], [id]))
DECLARE @i INT
DECLARE @sql VARCHAR(1024)
DECLARE @db SYSNAME
INSERT INTO @EnumDBs
SELECT ' USE ['+name+']
DBCC UPDATEUSAGE(0) WITH NO_INFOMSGS
INSERT INTO #EnumTables
SELECT '''+name+''' AS [db]
, u.name AS [owner]
, o.name AS [table]
FROM sysobjects AS o
JOIN sysusers AS u
ON o.uid = u.uid
WHERE type = ''U''
ORDER BY u.name
, o.name' AS [sql]
FROM master.dbo.sysdatabases WITH (NOLOCK)
WHERE dbid > 4
SELECT @i=COUNT(*)
, @sql=''
FROM @EnumDBs
WHILE @i > 0
BEGIN
SELECT @sql = SQL
FROM @EnumDBs
WHERE ID = @i
IF @@ROWCOUNT > 0
EXEC(@sql)
IF (@@ERROR <> 0) GOTO ERR_HANDLER
SET @[email protected]
END
SELECT @i=COUNT(*)
, @sql=''
FROM #EnumTables
WHILE @i > 0
BEGIN
SELECT @db=[db]
, @sql='USE ['+[db]+'] EXEC SP_SPACEUSED ''['+[db]+'].['+[owner]+'].['+[table]+']'''
FROM #EnumTables
WHERE ID = @i
--PRINT @SQL
INSERT INTO #TableMetrics
([table], [rows], [reserved], [data], [index_size], [unused])
EXEC(@sql)
IF (@@ERROR <> 0) GOTO ERR_HANDLER
UPDATE #TableMetrics
SET [db][email protected]
WHERE [db] IS NULL
IF (@@ERROR <> 0) GOTO ERR_HANDLER
SET @[email protected]
END
SELECT * FROM #TableMetrics ORDER BY [db], CAST(REPLACE([reserved],' KB','') AS INT) DESC
ERR_HANDLER:
DROP TABLE #EnumTables
DROP TABLE #TableMetrics
这里是我的版本,它采用了dm_db_partition_stats DMV:
SELECT object_name(object_id) as table_name,
SUM (row_count) AS total_number_of_rows
FROM sys.dm_db_partition_stats
WHERE (index_id=0 or index_id=1)
group by object_name(object_id)
order by SUM (row_count) desc
这是唯一一个工作到目前为止没有dbo架构表 – 2014-07-30 16:11:22
试试这个:
创建表:
create table maxRows (tablename varchar(900) primary key,CountOf int)
运行此并复制输出:
EXEC sp_msforeachtable 'print ''INSERT INTO maxRows SELECT ''''?'''', COUNT(*) FROM ? WITH (NOLOCK)'''
运行复制的输出,将其插入到表中的行数为每个表
现在运行此,列出了它们的行的表数:
select countOf,tablename from maxRows order by CountOf DESC
为什么如此复杂?? – 2009-08-19 13:40:33
哇,可能会造成很多表阻塞,如果你运行它作为读提交 – 2009-08-19 13:42:17
@marc_s,thsi返回实际表计数,而不是估计 – 2009-08-19 13:43:20
如果在数据库运行,以下返回表行数和索引/总空间使用情况。
declare @tableName varchar(100);
create table
#table
(
tablename sysname,
row_count int,
reserved varchar(50),
data varchar(50),
index_size varchar(50),
unused varchar(50)
);
create table
#table2
(
tableName varchar(100),
row_count int,
data_size int,
index_size int,
reserved int,
unused int
);
declare C_T cursor fast_forward for
select TableName = '[' + s.name + '].[' + t.name + ']'
from sys.tables t
inner join sys.schemas s on t.schema_id = s.schema_id
where t.type = 'U'
order by s.name,
t.name;
open C_T;
fetch next from C_T into @tableName;
while @@FETCH_STATUS = 0
begin
truncate table #table;
insert into #table
exec sp_spaceused @tableName, false;
insert into #table2(tableName, row_count, data_size, index_size, reserved, unused)
select @tableName,
row_count,
convert(int, replace(data, ' KB', '')),
convert(int, replace(index_size, ' KB', '')),
convert(int, replace(reserved, ' KB', '')),
convert(int, replace(unused, ' KB', ''))
from #table;
fetch next from C_T into @tableName;
end
close C_T;
deallocate C_T;
select [Table Name] = tableName,
[Rows] = row_count,
[Data Size (KB)] = data_size,
[Indexes Size (KB)] = index_size,
[Reserved Space (KB)] = reserved,
[Unused Space (KB)] = unused
from #table2
order by data_size desc;
drop table #table;
drop table #table2;
- 1. 在SQL Server的表中查找大多数查询项目
- 2. 用于查找与大多数朋友的人的SQL查询?
- 3. SQL:查找最大行数
- 4. SQL Server 2005查询
- 5. SQL:查询大表
- 6. SQL“树状”查询 - 大多数父组
- 7. SQL查询在SQL Server 2005
- 8. SQL查询从表中查找多个列值的计数?
- 9. SQL Server 2005的XML查询
- 10. SQL 2005中的TSQL:查询
- 11. SQL 2005中的TSQL:查询
- 12. 跨多个数据库查找表SQL SERVER 2005
- 13. SQL查询 - 找到多个和与行
- 14. 什么是查询执行到SQL Server 2005中的此查询?
- 15. 性能表(多查询vs单个大查询)的表格布局
- 16. SQL Alchemy查询多个表格
- 17. TSql(sql server 2005)查询运行缓慢
- 18. SQL服务器2005查询未运行
- 19. SQL 2005 SMO - 查找引用表
- 20. 查找Sql Server 2005中与某个表
- 21. SQL查询中的列的多值多列(SQL 2005)
- 22. 交叉表或SQL枢轴查询2005
- 23. sql查询从单元格表重建电子表格的行
- 24. 如何在多个部分中的大表上查找重复的SQL查询
- 25. SQL Server 2005求和查询
- 26. SQL 2005查询帮助
- 27. SQL 2005更新查询
- 28. 在SQL Server DISTINCT 2005查询
- 29. 查询SQL Server 2005中
- 30. SQL Server 2005子查询
完美的工作......谢谢。 – Patrick 2009-08-19 13:35:40
Gah,丑陋的加入语法:( – 2009-08-19 13:37:34
不再使用sysobjects和sysindexes系统表 - 它!它们很快就会被弃用,并且SQL Server 2005引入了具有所有必要视图 - sys的新的“sys”模式。表,sys.indexes和更多 - 使用这些,而不是! – 2009-08-19 13:37:51