2014-02-06 2 views
2

쓸데없는 레코드에서 데이터베이스를 정리하는 작업이 있습니다. 계획에서 가장 먼저 레코드 수를 보유하고있는 테이블이 무엇인지 확인해야합니다. 나는 그들을 수동으로 하나씩 점검 할 수 있다는 것을 알고 있지만, 테이블 목록이 너무 길어서 작업을 수행 할 수있는 자동 쿼리가 있는지를 확인하기 전에 수동으로 실행하는 것이 현명하지 않다고 생각하고 있습니다. 수동으로, 나는이 쿼리를 사용하여 각 테이블을 조회 할 수 있습니다 :대부분의 레코드 수가있는 쿼리 테이블

select count(*) from <table_name> 

도 sysobjects의를 사용하여, 내가

select * from sysobjects s where type='U' and name = '<table_name>' 

사람이 아이디어를 가지고 기록의 현재 수를 찾을 수 없습니다?

+0

* "D-word"에 대해 언급 할 용기가 있습니다. * ......... 동적 SQL을 아직 사용하지 않았습니까? – Jeroen

+0

이 게시물 읽기 : [sybase IQ의 모든 테이블에 대한 레코드 수를 얻는 방법] (http://scn.sap.com/thread/3448070) –

+0

SQL Server에서 레코드 수는 인덱스 메타 데이터에 저장됩니다 테이블. 이 도움말은 http://stackoverflow.com/questions/428458/counting-rows-for-all-tables-at-once에 도움이 될 것입니다. –

답변

2

... 사이베이스에서 작동하는지 확실하지 않음 , 여기에 정보를 얻을 수있는 방법이 있습니다.

SELECT o.name, t.rowcnt 
    FROM sysobjects o, systabstats t 
WHERE o.id = t.id 
    AND t.rowcnt > 0   --ignore 0 row entries 
    AND o.name not like "sys%" --exclude system tables 
ORDER BY t.rowcnt DESC 
+0

감사합니다. Micheal, 작동합니다! – hd84335

+0

좋습니다. upvote와 accognised으로 표시하는 것을 잊지 마십시오. –

0

이것은 T-SQL에서 작동합니다. 그것은 각 테이블의 행 수에 대한 근사치가 인덱스 통계의 일부로서 유지하고, 정기적으로 update statistics을 실행 가정하고 yourDB..systabstats에 저장됩니다

CREATE TABLE #RecCounts (TableName varchar(100), RecCount int) 

    SELECT object_id INTO #Processed FROM sys.tables WHERE name = '(no such table)' 

    DECLARE @TableId int, @TableName varchar(255), @TableSchema varchar(100), @CountSQL varchar(255) 

    SELECT @TableId = MIN(object_id) FROM sys.tables WHERE type = 'U' 
    AND object_id NOT IN (SELECT object_id FROM #Processed) 

    SET @TableId = ISNULL(@TableId, -1) 

    WHILE @TableId > -1 BEGIN 

     PRINT @TableId 

     SELECT @TableName = name FROM sys.tables WHERE type = 'U' AND object_id = @TableId 

     SELECT @TableSchema = s.name, @TableName = t.name 
      FROM sys.Tables t 
      INNER JOIN sys.schemas s ON s.schema_id = t.schema_id 
     WHERE t.object_id = @TableId 



     SET @CountSQL = 'DECLARE @RecCount int 
          SELECT @RecCount = COUNT(*) FROM ' + @TableSchema + '.' + @TableName + ' 
          INSERT INTO #RecCounts (TableName, RecCount) VALUES (''' + @TableName + ''', @RecCount)' 

     PRINT @CountSQL 
     EXEC(@CountSQL) 

     INSERT INTO #Processed (object_id) VALUES(@TableId) 

     SELECT @TableId = MIN(object_id) FROM sys.tables WHERE type = 'U' 
      AND object_id NOT IN (SELECT object_id FROM #Processed) 

    END 


    SELECT * FROM #RecCounts 
관련 문제