使用主键行数获取所有表名

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

长话短说,我需要一个结果集,它给出了输出

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 :(

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


您的设计非常值得怀疑,但这是以有效方式获得相对最新计数的一种方法。 在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;
链接地址: http://www.djcxy.com/p/17139.html

上一篇: get all table names with the primary key row count

下一篇: Problems when migrating from SQL Server 2000 to SQL Server 2008