fbpx

Como CONTAR todas as LINHAS de todas as TABELAS do SQL Server

By josue | SQL

Oi! Seja bem-vindo!

Hoje vamos aprender a forma mais fácil de CONTAR todas as LINHAS de todas as TABELAS do SQL Server com apenas um simples script. Algo que pode ajudar te ajudar até mesmo com a geração de indicadores de negócio.

Como CONTAR as LINHAS de todas as TABELAS do SQL Server

Volta e meia precisamos fazer levantamentos de volume de informações guardadas no nosso banco de dados, e uma das primeiras atividades sempre é descobrir quantas linhas temos em cada tabela. Há várias formas de fazer isso, sendo as duas mais populares o “select count(*) from nome_tabela” e o “execute sp_spaceused nome_tabela”.

Essas duas metodologias são precisas, porém extremamente lentas pois atuam individualmente em cada tabela. Sem falar que você acaba tendo que criar um “código específico” para poder ler todas as tabelas do seu banco…

Para resolver esse problema, criei o script abaixo, capaz de contar rapidamente a quantidade de registros de todas as tabelas de qualquer banco de dados SQL Server. Para usá-lo, é só executar no seu banco SQL:

 

select 
	schema_name(schema_id) as 'owner',
	tabelas.name as 'tabela',
	sum(partitions.rows) as 'linhas'
from sys.tables as tabelas
join sys.partitions as partitions on tabelas.object_id = partitions.object_id and partitions.index_id in (0,1)
group by schema_name(schema_id), tabelas.name

No vídeo de exemplo, você me viu usando um script maior, onde é possível testar o nosso script de contagem em um banco de dados de exemplo. Aqui vai o script completo usado no vídeo:

 

------------------------------------------------------------------
-- Como contar as linhas de todas as tabelas do SQL
------------------------------------------------------------------
-- Banco de testes
use master
if db_id('curso') is not null 
	drop database curso
go
create database curso
go
use curso
go

create table produtos (
	id smallint not null identity(1,1) constraint pk_produtos primary key,
	nm varchar(100),
	vl numeric(10,2)
)
insert into produtos (nm, vl) values 
	('Mouse Gammer 25 botões', 200),
	('Teclado Gammer 350 teclas', 300),
	('Monitor 32 Pol Full HD', 1000),
	('HD SSD 1TB', 2000)

create table clientes (
	id smallint not null identity(1,1) constraint pk_clientes primary key,
	nm varchar(100) not null
)
insert into clientes (nm) values
	('Ari Tuba'),
	('Dolores Fortes'),
	('José João Maria Antunes'),
	('Souza da Silva'),
	('Agripina de Arantes'),
	('Maldivino Salazar'),
	('Rolando da Rocha')

create table vendas (
	id int not null identity(1, 1) constraint pk_vendas primary key (id),
	dt date not null,
	id_produto smallint not null constraint fk_vendas_produtos foreign key references produtos(id),
	id_cliente smallint null constraint fk_vendas_clientes foreign key references clientes(id),
	qt int constraint ck_vendas_qt check (qt > 0),
	vl_unitario numeric (10,2), 
	vl_venda as qt * vl_unitario
)
;with cte_seq as (
	select 1 as nr_cont
	union all
	select nr_cont + 1 from cte_seq where nr_cont < 100
)
insert into vendas (dt, id_produto, id_cliente, qt, vl_unitario)
	select 
		dateadd(day, -(abs(checksum(newid())) % 3651), getdate()), -- data aleatória nos últimos 10 anos
		produto.id,
		clientes.id,
		1 + (abs(checksum(newid())) % 15) nr_quantidade, -- quantidade aleatória de 1 a 15
		produto.vl vl_unitario
	from cte_seq
	left join (select top 1 id, vl from produtos order by newid()) produto on 1=1 -- produto aleatório
	left join (select top 1 id from clientes order by newid()) clientes on 1=1 -- cliente aleatório
	option (maxrecursion 0)
go

----------------------------------------------
-- Contando linhas das tabelas
----------------------------------------------
select 
	schema_name(schema_id) as 'owner',
	tabelas.name as 'tabela',
	sum(partitions.rows) as 'linhas'
from sys.tables as tabelas
join sys.partitions as partitions on tabelas.object_id = partitions.object_id and partitions.index_id in (0,1)
group by schema_name(schema_id), tabelas.name



-- Limpando dados de teste
use master
drop table vendas, produtos, clientes
drop database curso

 

CONCLUSÃO

Apesar de temos o balanced scorecard (https://pt.wikipedia.org/wiki/Balanced_scorecard) popularizado a pelo menos 15 anos, a maioria das empresas não tem indicadores de TI por não saber como gera-los.

Acho sensacionais as oportunidades que você e eu temos de nos destacar no mercado de TI, pois com um script banal como esse podemos coletar estatísticas semanais sobre os nossos bancos e emitirmos um relatório mensal comparativo para que os gestores possam acompanhar o crescimento do banco de dados, do número de transações, do portfólio de produtos, do número de empregados, etc…

Gestores adoram esse tipo de coisa, pois acaba sendo um indicador numérico e preciso que permite o monitoramento da evolução do negócio, concorda? Eu costumo fazer isso para meus clientes e eles adoram…

Espero que você tenha gostado e continue firme e forte com seus estudos!

Abraço do seu amigo Josué

 

Follow

About the Author

Oi, aqui é o Josué. Sou o criador do site dba-pro.com. Minha missão é ajudar pessoas a usarem o potencial do SQL Server em suas profissões, para que trabalhem felizes e bem remuneradas. Sou consultor e empreendedor, atuando em empresas desde 2000 e dando aulas desde 2004. Adoro SQL, Excel, automatização de processos, finanças e Coaching. Quando não estou trabalhando ou estudando, gosto de leitura, games para PC, filmes, séries e conversas estimulantes.

(2) comments

Add Your Reply