我有一个场景,我需要比较两台服务器之间的数据。
长话短说,我需要一个输出结果,如
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 :(
提前感谢您分享您的建议/体验。
答案 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;