0

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

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

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

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

4

1 回答 1

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;
于 2013-04-02T04:23:39.047 回答