Friends of Red Gate 2010

Na última semana eu recebi da Red Gate um pacote contendo:

  • Um livro The Book of Red Gate 2010;
  • Uma camiseta com o exclusivo logotipo do programa Friends of Red Gate.

O livro não só conta um pouco da história da empresa, mas trás consigo um valor agregado, uma lição de conceitos que algumas empresas deveriam aprender.

Certamente estou apreciando muito a leitura.

 

Uma das frases que prendeu muito a minha atenção foi:

“We count contribution, not hours…What you achive is more than how long it takes.”

 

Algumas empresas que buscam melhores resultados controlando apenas BSCs deveriam observar que entregar um projeto de TI, seja ele um novo software, ou um atendimento de suporte é muito mais do que apenas números, é um resultado que deve ser mensurado com a qualidade e a satisfação dos clientes e dos colaboradores.

 

Para finalizar o post quero agradecer pela honra de ser um Friend of Red Gate.

 

Abraço, Rodrigo.  

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