복붙노트

[SQL] 어떻게 SQL Server 데이터베이스의 모든 테이블에 대한 행 수를 가져 오기 위해 [중복]

SQL

어떻게 SQL Server 데이터베이스의 모든 테이블에 대한 행 수를 가져 오기 위해 [중복]

나는 주어진 데이터베이스의 모든 테이블에서 모든 데이터 (즉, 행 수)이 있으면 결정하는 데 사용할 수있는 SQL 스크립트를 찾고 있어요.

아이디어는 기존의 모든 행 (데이터베이스의에)가있는 경우에 데이터베이스를 다시 화신입니다.

말한 데이터베이스의 존재는 마이크로 소프트 SQL 서버입니다.

사람은 샘플 스크립트를 제안 할 수 있을까요?

해결법

  1. ==============================

    1.다음 SQL은 당신에게 데이터베이스의 모든 테이블의 행 수를 얻을 것이다 :

    다음 SQL은 당신에게 데이터베이스의 모든 테이블의 행 수를 얻을 것이다 :

    CREATE TABLE #counts
    (
        table_name varchar(255),
        row_count int
    )
    
    EXEC sp_MSForEachTable @command1='INSERT #counts (table_name, row_count) SELECT ''?'', COUNT(*) FROM ?'
    SELECT table_name, row_count FROM #counts ORDER BY table_name, row_count DESC
    DROP TABLE #counts
    

    출력은 테이블과 해당 행 수의 목록이 될 것입니다.

    당신은 단지 추가, 전체 데이터베이스에서 전체 행 개수를 원하는 경우 :

    SELECT SUM(row_count) AS total_row_count FROM #counts
    

    당신에게 전체 데이터베이스에있는 행의 총 수에 대한 단일 값을 얻을 것이다.

  2. ==============================

    2.당신은 (*) 당신의 3million 행 테이블을 계산하는 데 걸리는 시간과 자원을 패스에 의해합니다. 켄달 반 다이크에 의해 SQL Server 중앙 당이보십시오.

    당신은 (*) 당신의 3million 행 테이블을 계산하는 데 걸리는 시간과 자원을 패스에 의해합니다. 켄달 반 다이크에 의해 SQL Server 중앙 당이보십시오.

    sysindexes의 사용 행 카운트 당신은 SQL 2000을 사용하는 경우 당신은 sysindexes의 너무 좋아 사용해야합니다 :

    -- Shows all user tables and row counts for the current database 
    -- Remove OBJECTPROPERTY function call to include system objects 
    SELECT o.NAME,
      i.rowcnt 
    FROM sysindexes AS i
      INNER JOIN sysobjects AS o ON i.id = o.id 
    WHERE i.indid < 2  AND OBJECTPROPERTY(o.id, 'IsMSShipped') = 0
    ORDER BY o.NAME
    

    당신은 여전히 ​​작업을 SQL 2005 또는 2008 질의하면 sysindexes을합니다 사용하고 있지만, 마이크로 소프트는 sysindexes에 그래서 당신이 그렇게 좋아, 대신 DMV에 사용해야 좋은 연습과 같은 SQL Server의 이후 버전에서 제거 될 수 있음을 조언하는 경우 :

    -- Shows all user tables and row counts for the current database 
    -- Remove is_ms_shipped = 0 check to include system objects 
    -- i.index_id < 2 indicates clustered index (1) or hash table (0) 
    SELECT o.name,
      ddps.row_count 
    FROM sys.indexes AS i
      INNER JOIN sys.objects AS o ON i.OBJECT_ID = o.OBJECT_ID
      INNER JOIN sys.dm_db_partition_stats AS ddps ON i.OBJECT_ID = ddps.OBJECT_ID
      AND i.index_id = ddps.index_id 
    WHERE i.index_id < 2  AND o.is_ms_shipped = 0 ORDER BY o.NAME 
    
  3. ==============================

    3.저장 발동을 필요로하지 않습니다, 푸른에서 작동합니다.

    저장 발동을 필요로하지 않습니다, 푸른에서 작동합니다.

    SELECT t.name, s.row_count from sys.tables t
    JOIN sys.dm_db_partition_stats s
    ON t.object_id = s.object_id
    AND t.type_desc = 'USER_TABLE'
    AND t.name not like '%dss%'
    AND s.index_id IN (0,1)
    

    신용.

  4. ==============================

    4.내가 생각하는 다른 사람보다 더 나은이 하나 개 보인다.

    내가 생각하는 다른 사람보다 더 나은이 하나 개 보인다.

    USE  [enter your db name here]
    GO
    
    SELECT      SCHEMA_NAME(A.schema_id) + '.' +
            --A.Name, SUM(B.rows) AS 'RowCount'  Use AVG instead of SUM
              A.Name, AVG(B.rows) AS 'RowCount'
    FROM        sys.objects A
    INNER JOIN sys.partitions B ON A.object_id = B.object_id
    WHERE       A.type = 'U'
    GROUP BY    A.schema_id, A.Name
    GO
    
  5. ==============================

    5.짧고 달다

    짧고 달다

    sp_MSForEachTable 'DECLARE @t AS VARCHAR(MAX); 
    SELECT @t = CAST(COUNT(1) as VARCHAR(MAX)) 
    + CHAR(9) + CHAR(9) + ''?'' FROM ? ; PRINT @t'
    

    산출:

  6. ==============================

    6.그것은 표준 보고서에의 등 행 수를 포함하여 - - 나중에 SQL Server 2005 또는 테이블의 크기를 보여주는 아주 좋은 보고서를 제공하고이 표에 의한 디스크의 사용이다.

    그것은 표준 보고서에의 등 행 수를 포함하여 - - 나중에 SQL Server 2005 또는 테이블의 크기를 보여주는 아주 좋은 보고서를 제공하고이 표에 의한 디스크의 사용이다.

    프로그래밍, 멋진 솔루션에서이있다 : http://www.sqlservercentral.com/articles/T-SQL/67624/

  7. ==============================

    7.

    SELECT 
        sc.name +'.'+ ta.name TableName, SUM(pa.rows) RowCnt
    FROM 
        sys.tables ta
    INNER JOIN sys.partitions pa
        ON pa.OBJECT_ID = ta.OBJECT_ID
    INNER JOIN sys.schemas sc
        ON ta.schema_id = sc.schema_id
    WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
    GROUP BY sc.name,ta.name
    ORDER BY SUM(pa.rows) DESC
    
  8. ==============================

    8.즉 자원 집약적 인 작업이기 때문에, TABLENAME FROM SELECT COUNT (*)를 사용하지 마십시오. 하나는 데이터베이스의 모든 테이블에 대한 행 수의 정보를 얻기 위해 SQL 서버 동적 관리 뷰 또는 시스템 카탈로그를 사용해야합니다.

    즉 자원 집약적 인 작업이기 때문에, TABLENAME FROM SELECT COUNT (*)를 사용하지 마십시오. 하나는 데이터베이스의 모든 테이블에 대한 행 수의 정보를 얻기 위해 SQL 서버 동적 관리 뷰 또는 시스템 카탈로그를 사용해야합니다.

  9. ==============================

    9.나는 프레데릭의 솔루션에 작은 변화를 만들 것입니다. 또한 데이터와 인덱스 크기가 포함됩니다 sp_spaceused를 시스템 저장 프로 시저를 사용합니다.

    나는 프레데릭의 솔루션에 작은 변화를 만들 것입니다. 또한 데이터와 인덱스 크기가 포함됩니다 sp_spaceused를 시스템 저장 프로 시저를 사용합니다.

    
    declare c_tables cursor fast_forward for 
    select table_name from information_schema.tables 
    
    open c_tables 
    declare @tablename varchar(255) 
    declare @stmt nvarchar(2000) 
    declare @rowcount int 
    fetch next from c_tables into @tablename 
    
    while @@fetch_status = 0 
    begin 
    
        select @stmt = 'sp_spaceused ' + @tablename 
    
        exec sp_executesql @stmt
    
        fetch next from c_tables into @tablename 
    
    end 
    
    close c_tables 
    deallocate c_tables 
    
    
  10. ==============================

    10.INFORMATION_SCHEMA.TABLES에서 모든 행을 선택보고, 해당 뷰에서 반환 된 각 항목에 대해 카운트 (*) 문을 실행합니다.

    INFORMATION_SCHEMA.TABLES에서 모든 행을 선택보고, 해당 뷰에서 반환 된 각 항목에 대해 카운트 (*) 문을 실행합니다.

    declare c_tables cursor fast_forward for
    select table_name from information_schema.tables
    
    open c_tables
    declare @tablename varchar(255)
    declare @stmt nvarchar(2000)
    declare @rowcount int
    fetch next from c_tables into @tablename
    
    while @@fetch_status = 0
    begin
    
        select @stmt = 'select @rowcount = count(*) from ' + @tablename
    
        exec sp_executesql @stmt, N'@rowcount int output', @rowcount=@rowcount OUTPUT
    
        print N'table: ' + @tablename + ' has ' + convert(nvarchar(1000),@rowcount) + ' rows'
    
        fetch next from c_tables into @tablename
    
    end
    
    close c_tables
    deallocate c_tables
    
  11. ==============================

    11.다음은 또한 당신에게뿐만 아니라 스키마를 제공하는 동적 SQL 접근 방법이다 :

    다음은 또한 당신에게뿐만 아니라 스키마를 제공하는 동적 SQL 접근 방법이다 :

    DECLARE @sql nvarchar(MAX)
    
    SELECT
        @sql = COALESCE(@sql + ' UNION ALL ', '') +
            'SELECT
                ''' + s.name + ''' AS ''Schema'',
                ''' + t.name + ''' AS ''Table'',
                COUNT(*) AS Count
                FROM ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name)
        FROM sys.schemas s
        INNER JOIN sys.tables t ON t.schema_id = s.schema_id
        ORDER BY
            s.name,
            t.name
    
    EXEC(@sql)
    

    필요한 경우이 인스턴스의 모든 데이터베이스를 통해 실행하려면이 옵션을 확장 할 사소한 것 (하려면 sys.databases에 가입).

  12. ==============================

    12.이것은 내가 종류를 사용하고 내가 필요로하는 결과를 얻을 수있는 "TEST"임시 테이블에 결과를두고 SQL 2008 내가 좋아하는 솔루션입니다 :

    이것은 내가 종류를 사용하고 내가 필요로하는 결과를 얻을 수있는 "TEST"임시 테이블에 결과를두고 SQL 2008 내가 좋아하는 솔루션입니다 :

    SET NOCOUNT ON 
    DBCC UPDATEUSAGE(0) 
    DROP TABLE #t;
    CREATE TABLE #t 
    ( 
    [name] NVARCHAR(128),
    [rows] CHAR(11),
    reserved VARCHAR(18), 
    data VARCHAR(18), 
    index_size VARCHAR(18),
    unused VARCHAR(18)
    ) ;
    INSERT #t EXEC sp_msForEachTable 'EXEC sp_spaceused ''?''' 
    SELECT * INTO TEST FROM #t;
    DROP TABLE #t;
    SELECT  name, [rows], reserved, data, index_size, unused FROM TEST \
    WHERE ([rows] > 0) AND (name LIKE 'XXX%')
    
  13. ==============================

    13.

        SELECT
              SUM(sdmvPTNS.row_count) AS [DBRows]
        FROM
              sys.objects AS sOBJ
              INNER JOIN sys.dm_db_partition_stats AS sdmvPTNS
                    ON sOBJ.object_id = sdmvPTNS.object_id
        WHERE 
              sOBJ.type = 'U'
              AND sOBJ.is_ms_shipped = 0
              AND sdmvPTNS.index_id < 2
        GO
    
  14. from https://stackoverflow.com/questions/2221555/how-to-fetch-the-row-count-for-all-tables-in-a-sql-server-database by cc-by-sa and MIT license