获取具有主键行计数的所有表名

时间:2013-04-02 04:16:45

标签: sql-server-2000

我有一个场景,我需要比较两台服务器之间的数据。

长话短说,我需要一个输出结果,如

SchemaName|TableName|RowCount_PrimaryKey

每当一个新学生加入一个独特的模式时,就会创建一个Stu1200,这个模式有5个表,如

stu1200.class
stu1200.sub
stu1200.avg
stu1200.work
stu1200.blabla

我们的数据库中有500名学生。所以500架构。我需要比较500名学生的所有工作表。

为了做到这一点,我需要获得主键的计数,比如StuID。因此,我需要使用表格来获取所有500个模式。

这样的东西
SchemaName  TableName   StuID_Count
stu1200      Work         70
Stu1201      Work         112
Stu1202      Work         9

如何做到这一点?我有一个脚本,它执行表的行计数,但它没用,我需要仅基于主键的行计数。

注意:使用SQL Server 2000 :(

提前感谢您分享您的建议/体验。

1 个答案:

答案 0 :(得分:1)

您的设计非常值得怀疑,但这是一种以有效的方式获得相对最新统计数据的方法。在SQL Server 2005 +中:

DECLARE @tablename SYSNAME;
SET @tablename = N'Work';

SELECT 
  SchemaName = OBJECT_SCHEMA_NAME([object_id]), 
  TableName = @tablename, 
  RowCount_PrimaryKey = SUM([rows])
FROM sys.partitions
  WHERE OBJECT_NAME([object_id]) = @tablename
  AND index_id IN (0,1)
  GROUP BY OBJECT_SCHEMA_NAME([object_id])
  ORDER BY SchemaName;

刚刚注意到SQL Server 2000。

DECLARE @tablename SYSNAME;
SET @tablename = N'Work';

SELECT
  SchemaName = u.name,
  TableName = @tablename,
  i.rows
FROM 
  sys.sysindexes AS i
INNER JOIN sys.sysobjects AS o
  ON i.id = o.id
INNER JOIN sys.sysusers AS u
  ON o.uid = u.uid
  WHERE i.indid IN (0,1)
  AND o.name = @tablename;