Essa pergunta foi enviada a pouco por um leitor assíduo do meu blog: “Como eu posso passar um range de dados como um parâmetro para uma stored procedure?”
Simples, podemos utilizar o tipo table. No código baixo eu crio uma variável do tipo table e uma rotina com Select … Insert para popular essa minha variável, veja o código:
Declare @tb as table (cdevento int, cdeventoitem int)
insert into @tb ( cdevento, cdeventoitem)
SELECT eventoitem.cdevento, eventoitem.cdeventoitem
FROM ESMR..ESM_modelo
INNER JOIN ESMR..ESM_eventoitem ON
ESM_modelo.cdmodelo = ESM_eventoitem.cdmodelo
INNER JOIN ESMR..ESM_marca ON
ESM_modelo.cdmarca = ESM_marca.cdmarca
INNER JOIN ESMR..ESM_fabricante ON
ESM_marca.cdfabricante = ESM_fabricante.cdfabricante
WHERE(ESM_fabricante.btaprovado = 0)
OR ESM_marca.btaprovado = 0
OR ESM_modelo.btaprovado= 0
Agora para utilizar esse código eu criei um Insert com Select e na clausula Where eu inclui um subselect para considerar somente o retorno do meu objeto table. Veja o código abaixo:
insert into ESM.dbo.ESM_apv_evento
(
cdevento, dtevento, cdlocal, nmcontato, cdcargocontato, nrvalorconfiabilidade
)
select cdevento, dtevento,cdlocal,nmcontato,cdcargocontato,nrvalorconfiabilidade
from ESMR..ESM_evento
where cdevento in
(
select cdevento from @tb
)
Ok, Rodrigo! Mas você falou que seria um parâmetro em uma stored procedure. Certo, no exemplo abaixo vou mostar como criar uma UDT (User Defined Type) baseado em um tipo table e passar como parametro para uma stored procedure.
create type tabParametro as table
(
Nome varchar(20),
QtdParticipantes int,
)
Aqui vou criar a stored procedure que recebe o parâmetro da UDT criada acima.
create procedure InsereEvento
(
@pTab tabParametro readonly
)
as
insert
into Evento (Nome, NrParticipante)
select Nome, QtdParticpantes
from @pTab;
E para utilizar essa estrutura vamos seguir o exemplo abaixo:
–Preenchimento da variável que será passado como parametro
declare @tabParametro_Var tabParametro
insert into @tabParametro_Var values (‘SQL Server Day’, ‘998’)
insert into @tabParametro_Var values (‘SQL Server Saturday Night’, ‘888’)
–Executa a stored procedure
exec InsereEvento @tabParametro_Var
Espero que esse post ajude aos amigos que estão iniciando no desenvolvimento com SQL Server 2008 a incorporar essas técnicas no dia-a-dia.
Abraço, Rodrigo