Passando uma tabela como parâmetro

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

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s