sql - 쿼리 - 테이블 select




SQL SERVER 데이터베이스의 모든 테이블에 대한 행 수를 가져 오는 방법 (9)

Azure에서 작동하며 저장된 procs는 필요하지 않습니다.

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)

Credit .

이 질문에는 이미 답변이 있습니다.

주어진 데이터베이스의 테이블에 데이터 (즉, 행 수)가 있는지 판별하는 데 사용할 수있는 SQL 스크립트를 찾고 있습니다.

아이디어는 데이터베이스에 행이있는 경우에 대비하여 데이터베이스를 다시 구체화하는 것입니다.

사용중인 데이터베이스는 Microsoft SQL SERVER 입니다.

누군가가 샘플 스크립트를 제안 할 수 있습니까?


Frederik의 솔루션을 약간 변경했습니다. 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 


SQL Server 2005 이상에서는 행 개수 등을 포함하여 테이블 크기를 보여주는 훌륭한 보고서를 제공합니다. 표준 보고서에 포함되어 있으며 테이블 별 디스크 사용량입니다.

프로그래밍 방식으로 멋진 솔루션이 있습니다. http://www.sqlservercentral.com/articles/T-SQL/67624/


information_schema.tables보기에서 모든 행을 선택하고 해당보기에서 리턴 된 각 항목에 대해 count (*) 문을 발행하십시오.

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', @[email protected] 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

다음과 같은 스키마를 제공하는 동적 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 조인)를 실행하도록이 작업을 확장하는 것이 sys.databases .


리소스 집약적 인 작업이므로 SELECT COUNT(*) FROM TABLENAME 사용하지 마십시오. SQL Server 동적 관리 뷰 또는 시스템 카탈로그 를 사용하여 데이터베이스의 모든 테이블에 대한 행 수 정보를 가져와야합니다.


이것은 내가 생각하는 다른 것보다 좋아 보인다.

USE  [enter your db name here]
GO

SELECT      SCHEMA_NAME(A.schema_id) + '.' +
        A.Name, SUM(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

짧고 달다

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

산출:


    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




rowcount