2013-04-02 1 views
0

두 서버 간의 데이터를 비교해야하는 시나리오가 있습니다.기본 키 행 수를 가진 모든 테이블 이름을 얻으십시오

, 나는 새로운 학생이 생성 된 고유 한 스키마를 조인 할 때마다

SchemaName|TableName|RowCount_PrimaryKey 

같은 출력을 제공하는 결과 집합을

길고도 짧은 이야기 필요하다고 Stu1200이 스키마는

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 서버 2000 :(제안/경험을 공유하기위한 사전에

감사를 사용

+1

모든 학생에게 새 스키마를 만드시겠습니까? Yikes. –

+0

잠깐, SQL Server 2000에서 스키마를 어떻게 작성하고 있습니까? 새 주인을 찾으셨습니까? –

+0

예 새로운 주인이 – palum

답변

1

귀하의 디자인은 매우 의심하지만, 여기에 상대적으로 최근의 수를 얻을 수있는 방법이다 효율적인 방식으로 SQL 서버 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 서버 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; 
+0

where 절의 간단한 질문 인디 드 (0,1)에 무슨 뜻입니까? – palum

+0

Indid 0 = 힙, indid 1 = 클러스터 된 인덱스. 다른 지수를 세는 것은 의미가 없습니다. –