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é