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

Autor: SQLCrespi

Rodrigo Crespi é MVP Data Platform, MCT, MCSE, MCSA, MCIT, MCDBA e MCP em SQL Server, possuí outras certificações em .NET Framework, Dynamics CRM e etc. Iniciou trabalhando com SQL Server na versão 6.5 na época como desenvolvedor, logo direcionou a sua carreira para a área de administração de bancos de dados. Atualmente é Sócio da CrespiDB – Soluções em Plataformas de Dados, além de professor universitário na Uniftec – Caxias do Sul Autor de diversos artigos publicados em sites e revistas sobre SQL Server e engenharia de software, mantem o canal SQLCrespi no Youtube, o blog SQLCrespi, além de ser dedicado ao SQL Server RS PASS Chapter Leader do grupo de profissionais em SQL Server do Rio Grande do Sul.

Deixe um comentário

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