Oi! Seja bem-vindo!

Como incluir dados de teste no SQL? Hoje estudaremos uma excelente técnica para fazer esse tipo de tarefa que ajuda muito com seus testes de performance e funcionalidade de quaisquer aplicativos que você esteja gerenciando!

Como incluir dados de teste no SQL Server

Desde o último artigo, quando falei sobre como gerar dados aleatórios, recebi pedidos para exemplificar como incluir dados de teste no SQL na prática. Então fiz esse vídeo mostrando a você um script bem legal que já utilizo a anos para essa finalidade. Veja abaixo:

 


-------------------------------------------------------
-- Como incluir dados de teste no SQL Server
-------------------------------------------------------
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', 700),
	('HD SSD 1TB', 1800)

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')

create table vendas (
	id int not null identity(1, 1) constraint pk_vendas primary key,
	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
)

-- CTE recursiva: Incluir 100 vendas aleatoriamente
;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)

select * from vendas


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


 

CONCLUSÃO

Não sei porque gosto tanto de CTE (common table expression) para fazer esse tipo de coisa… Sempre que uso esse script acho tão legal… 🙂 Que besta né… pareço criança que acabou de ganhar um brinquedo kkkkkkkk

Espero que tenha gostado do artigo, nos vemos no próximo!

Abraço do seu amigo Josué

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *