2009-05-13 4 views
0

SQL Server 2000 db가 있고 데이터베이스의 사용자 테이블에 포함 된 모든 숫자 필드에 대한 요약 정보를 검색하려고합니다.SQL Server 2000 db의 숫자 필드를 요약하는 T-SQL 쿼리

나는 다음과 같은 쿼리로 이름, 데이터 유형 및 크기를 검색 할 수 있습니다

SELECT t.name AS [TABLE Name], 
c.name AS [COLUMN Name], 
p.name AS [DATA Type], 
p.length AS [SIZE] 
FROM dbo.sysobjects AS t 
JOIN dbo.syscolumns AS c 
ON t.id=c.id 
JOIN dbo.systypes AS p 
ON c.xtype=p.xtype 
WHERE t.xtype='U' 
and p.prec is not null 

이 어떻게 한 단계 더 갈 수 있고, 각 필드에 포함 된 평균 값 목록을?

하위 쿼리를 사용하여이 작업을 수행 할 수 있습니까? 아니면이 쿼리의 결과를 커서에두고 각 열의 두 번째 선택 쿼리를 반복해야합니까?

답변

1

내 가장 빠른 추측은 커서를 사용하는 것입니다 :

DECLARE @Table varchar(80) 
DECLARE @Column varchar(80) 
DECLARE @Sql varchar(300) 

DECLARE fields CURSOR FORWARD_ONLY 
FOR SELECT t.name AS [Table], c.name AS [COLUMN] 
FROM dbo.sysobjects AS t 
JOIN dbo.syscolumns AS c ON t.id=c.id 
JOIN dbo.systypes AS p ON c.xtype=p.xtype 
WHERE t.xtype='U' 
    and p.name = 'int' 
    and p.prec is not null 

OPEN fields 

FETCH NEXT FROM fields 
INTO @Table, @Column 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @sql = 'SELECT ''' + @Table + '.' + @Column + ''', Avg(' + @Column+ ') FROM ' + @Table 
    EXEC(@Sql) 

    FETCH NEXT FROM fields 
    INTO @Table, @Column 

END 
CLOSE fields 
DEALLOCATE fields 

임시 테이블도 잘 작동합니다. Min() 및 Max() 값을 추가 할 수도 있습니다. 희망 하시겠습니까?

+0

고마워요. 변수에서 select를 생성 할 수 없기 때문에 단일 쿼리 내에서 가능할 수 있지만 exec()를 사용하여이를 극복하지는 않았습니다. 완벽한, 감사합니다! – meepmeep

0

프로파일 링 도구가 필요하다고 생각됩니다. Visual Studio 2008 Database Edition 또는 DataCleaner과 같은 오픈 소스 대안을 사용할 수 있습니다.

+0

동의 함, DataCleaner는 훌륭한 선택입니다. 이 기능을 사용하면 내장 된 데이터 프로파일 러보다 훨씬 재미있는 것을 찾을 수 있습니다. 최신 버전은 MS SQL 서버에 연결하는 것에 대해 좀 더 나은 문서를 가지고 있으므로 더 쉬워졌습니다. http://datacleaner.eobjects.org/resources/docs/2.4/html/ch10s03.html –