none
Listar todos os Bancos, Tabelas e quantidade de registros maior que zero RRS feed

Respostas

  • declare @command varchar(1000)

    SELECT @command = 'USE [?]; SELECT "?" [db name], t.[table name], p.[rows] FROM sys.schemas s INNER JOIN sys.tables t ' +
    'ON t.[schema_id] = s.[schema_id] INNER JOIN sys.indexes i ON i.[object_id] = t.[object_id] ' +
    'AND i.[type] IN (0,1) INNER JOIN sys.partitions p ON p.[object_id] = t.[object_id] ' +
    'AND p.[index_id] = i.[index_id]'

    EXECUTE sp_MSforeachdb @command
    • Marcado como Resposta MLRamos terça-feira, 18 de junho de 2019 16:24
    segunda-feira, 17 de junho de 2019 21:39

Todas as Respostas

  • MLRamos,

    Acredito que estes dois exemplos podem te ajudar:

    -- Exemplo 1 --
    SELECT t.[name], p.[rows]
    FROM sys.schemas s INNER JOIN sys.tables t 
                                              ON t.[schema_id] = s.[schema_id] 
    										 INNER JOIN sys.indexes i 
    										  ON i.[object_id] = t.[object_id] 
    										  AND i.[type] IN (0,1)
    										 INNER JOIN sys.partitions p 
    										 ON p.[object_id] = t.[object_id]
    										 AND p.[index_id] = i.[index_id]
    Go
    
    -- Exemplo 2 --
    ;With Contador (name, rows)
    As
    (
    SELECT t.[name], p.[rows]
    FROM sys.schemas s INNER JOIN sys.tables t 
                                              ON t.[schema_id] = s.[schema_id] 
    										 INNER JOIN sys.indexes i 
    										  ON i.[object_id] = t.[object_id] 
    										  AND i.[type] IN (0,1)
    										 INNER JOIN sys.partitions p 
    										 ON p.[object_id] = t.[object_id]
    										 AND p.[index_id] = i.[index_id]
    )
    Select name, rows,  '' as soma from Contador
    Union all
    Select 'Total' , Null, convert(varchar(10),sum(rows)) as soma from contador

    Ou estes outros:

    -- Exemplo 1 - Sumarizado --
    Select ST.Name As 'Tabela',
           SP.rows As 'Linhas',
    	   SA.data_pages As 'Páginas de Dados',
    	   SA.used_pages As 'Páginas de Dados Utilizadas',
    	   SA.total_pages As 'Total de Páginas de Dados'	   
    from sys.tables ST Inner Join sys.partitions SP
                        On ST.object_id = SP.object_id
    				   Inner Join sys.allocation_units SA
    				    On SA.container_id = SP.partition_id
    Go
    
    -- Exemplo 2 - Detalhada --
    Select ST.Name As 'Tabela',
           SP.rows As 'Linhas',
    	   SA.data_pages As 'Páginas de Dados',
    	   SA.used_pages As 'Páginas de Dados Utilizadas',
    	   SA.total_pages As 'Total de Páginas de Dados',	   
    	   SB.Row_Count
    from sys.tables ST Inner Join sys.partitions SP
                        On ST.object_id = SP.object_id
    				   Inner Join sys.allocation_units SA
    				    On SA.container_id = SP.partition_id
    				   Inner Join sys.dm_os_buffer_descriptors SB
    				    On SB.allocation_unit_id = SA.allocation_unit_id
    Go
    
    -- Exemplo 3 - Mais Detalhada --
    Select ST.Name As 'Tabela',
           SP.rows As 'Linhas',
    	   SB.free_space_in_bytes As 'Espaço Livre em Bytes',
    	   SB.page_id As 'Identificador da Página',
    	   SB.page_type As 'Tipo da Página',
    	   SB.Row_Count As 'Total de Linhas por Página'
    from sys.tables ST Inner Join sys.partitions SP
                        On ST.object_id = SP.object_id
    				   Inner Join sys.allocation_units SA
    				    On SA.container_id = SP.partition_id
    				   Inner Join sys.dm_os_buffer_descriptors SB
    				    On SB.allocation_unit_id = SA.allocation_unit_id
    Go


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    domingo, 16 de junho de 2019 00:13
  • E é isso mesmo... !

    Gostaria de listar todos os Bancos de Dados, suas tabelas e quantidade de registros (?).

    declare @command varchar(1000)

    SELECT @command = 'USE ?; SELECT t.[name], p.[rows] FROM sys.schemas s INNER JOIN sys.tables t ' +
    'ON t.[schema_id] = s.[schema_id] INNER JOIN sys.indexes i ON i.[object_id] = t.[object_id] ' +
    'AND i.[type] IN (0,1) INNER JOIN sys.partitions p ON p.[object_id] = t.[object_id] ' +
    'AND p.[index_id] = i.[index_id]'

    EXECUTE sp_MSforeachdb @command

    domingo, 16 de junho de 2019 05:13
  • MLRamos,

    Acredito que estes dois exemplos podem te ajudar:

    -- Exemplo 1 --
    SELECT t.[name], p.[rows]
    FROM sys.schemas s INNER JOIN sys.tables t 
                                              ON t.[schema_id] = s.[schema_id] 
    										 INNER JOIN sys.indexes i 
    										  ON i.[object_id] = t.[object_id] 
    										  AND i.[type] IN (0,1)
    										 INNER JOIN sys.partitions p 
    										 ON p.[object_id] = t.[object_id]
    										 AND p.[index_id] = i.[index_id]
    Go
    
    -- Exemplo 2 --
    ;With Contador (name, rows)
    As
    (
    SELECT t.[name], p.[rows]
    FROM sys.schemas s INNER JOIN sys.tables t 
                                              ON t.[schema_id] = s.[schema_id] 
    										 INNER JOIN sys.indexes i 
    										  ON i.[object_id] = t.[object_id] 
    										  AND i.[type] IN (0,1)
    										 INNER JOIN sys.partitions p 
    										 ON p.[object_id] = t.[object_id]
    										 AND p.[index_id] = i.[index_id]
    )
    Select name, rows,  '' as soma from Contador
    Union all
    Select 'Total' , Null, convert(varchar(10),sum(rows)) as soma from contador

    Ou estes outros:

    -- Exemplo 1 - Sumarizado --
    Select ST.Name As 'Tabela',
           SP.rows As 'Linhas',
    	   SA.data_pages As 'Páginas de Dados',
    	   SA.used_pages As 'Páginas de Dados Utilizadas',
    	   SA.total_pages As 'Total de Páginas de Dados'	   
    from sys.tables ST Inner Join sys.partitions SP
                        On ST.object_id = SP.object_id
    				   Inner Join sys.allocation_units SA
    				    On SA.container_id = SP.partition_id
    Go
    
    -- Exemplo 2 - Detalhada --
    Select ST.Name As 'Tabela',
           SP.rows As 'Linhas',
    	   SA.data_pages As 'Páginas de Dados',
    	   SA.used_pages As 'Páginas de Dados Utilizadas',
    	   SA.total_pages As 'Total de Páginas de Dados',	   
    	   SB.Row_Count
    from sys.tables ST Inner Join sys.partitions SP
                        On ST.object_id = SP.object_id
    				   Inner Join sys.allocation_units SA
    				    On SA.container_id = SP.partition_id
    				   Inner Join sys.dm_os_buffer_descriptors SB
    				    On SB.allocation_unit_id = SA.allocation_unit_id
    Go
    
    -- Exemplo 3 - Mais Detalhada --
    Select ST.Name As 'Tabela',
           SP.rows As 'Linhas',
    	   SB.free_space_in_bytes As 'Espaço Livre em Bytes',
    	   SB.page_id As 'Identificador da Página',
    	   SB.page_type As 'Tipo da Página',
    	   SB.Row_Count As 'Total de Linhas por Página'
    from sys.tables ST Inner Join sys.partitions SP
                        On ST.object_id = SP.object_id
    				   Inner Join sys.allocation_units SA
    				    On SA.container_id = SP.partition_id
    				   Inner Join sys.dm_os_buffer_descriptors SB
    				    On SB.allocation_unit_id = SA.allocation_unit_id
    Go


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    Junior Galvão, 

    Grato, mas seus exemplos - todos - listam as tabelas do Banco "em uso" apenas.
    Então, mesmo estando no "master" não traz os databases ... 

    segunda-feira, 17 de junho de 2019 18:20
  • E é isso mesmo... !

    Gostaria de listar todos os Bancos de Dados, suas tabelas e quantidade de registros (?).

    declare @command varchar(1000)

    SELECT @command = 'USE ?; SELECT t.[name], p.[rows] FROM sys.schemas s INNER JOIN sys.tables t ' +
    'ON t.[schema_id] = s.[schema_id] INNER JOIN sys.indexes i ON i.[object_id] = t.[object_id] ' +
    'AND i.[type] IN (0,1) INNER JOIN sys.partitions p ON p.[object_id] = t.[object_id] ' +
    'AND p.[index_id] = i.[index_id]'

    EXECUTE sp_MSforeachdb @command

    dba.noturno, muito obrigado!

    Chegou bem perto do que preciso, faltando apenas o nome do DATABASE ... esqueceu algo talvez ? 

    segunda-feira, 17 de junho de 2019 18:22
  • declare @command varchar(1000)

    SELECT @command = 'USE [?]; SELECT "?" [db name], t.[table name], p.[rows] FROM sys.schemas s INNER JOIN sys.tables t ' +
    'ON t.[schema_id] = s.[schema_id] INNER JOIN sys.indexes i ON i.[object_id] = t.[object_id] ' +
    'AND i.[type] IN (0,1) INNER JOIN sys.partitions p ON p.[object_id] = t.[object_id] ' +
    'AND p.[index_id] = i.[index_id]'

    EXECUTE sp_MSforeachdb @command
    • Marcado como Resposta MLRamos terça-feira, 18 de junho de 2019 16:24
    segunda-feira, 17 de junho de 2019 21:39