quarta-feira, 22 de dezembro de 2010

Armazenando o select de uma Stored Procedure SQL

Para armazenar o select de uma stored procedure, no sql 2005 eh um pouco diferente.
precisa seguir alguns passos:

- precisa ter um linked server configurado.
- chamar a rotina que retornara o conteudo da proc.

configurando o linked server:


exec sp_addlinkedserver
@server = '[nome que vc dara ao link]',
@srvproduct = '',
@provider = 'SQLNCLI',--FICA ASSIM MESMO
@provstr = 'DRIVER={SQLServer};SERVER=[IP DO SEU SERVIDOR ONDE ESTA A SUA BASE];UID=[LOGIN];PWD=[SENHA];'
 
feito isso teremos o link configurado.
agora basta chamar a rotina assim:
 
 

select * from openquery([nome dado ao link],
'execute [Teste_RetornoProc])
 
com isso pode-se inserir o retorno em qualquer tabela, tanto temporaria ou variavel, ou mesmo tabela fisica.

Armazenando o retorno de uma Stored Procedure SQL

Esse eu perdi um tempinho procurando pois nao sabia como funcionava, mas achei um tutorial da microsoft e fiquei besta da facilidade:

Ex.
--proc exemplo
create procedure Teste_RetornaStatus
@contratoId as int
as begin
   select contratoStatus
   from contrato
   where contratoId = @contratoId
end

--executando a proc
declare @status as int

--armazenando o retorno da procedure (simples)
execute @status = Teste_RetornaStatus @contratoId = 12

pronto , o retorno esta na variavel @status.

segunda-feira, 20 de dezembro de 2010

Cláusula OUTPUT

As instruções INSERT, DELETE e UPDATE ganharam uma nova clausula, OUTPUT .

Ex:
--declarando uma tabela que ira receber os dados
DECLARE @Deletados AS TABLE (materia INT, nome_artita VARCHAR(30))

--executando o codigo e abastacendo a tabela
DELETE aluna OUTPUT
DELETED.materia,
DELETED.nome_artista
INTO @Deletados
WHERE materia = 6

PIVOT - transformando linhas em colunas

A função PIVOT transforma o ajuste de linhas para colunas.

Ex: --TRANSFORMANDO LINHAS EM COLUNAS NO SQL SERVER 2000


select  Produto,
           sum(case Mes when 1 then Valor else 0 end) as Jan,
           sum(case Mes when 2 then Valor else 0 end) as Fev,
           sum(case Mes when 3 then Valor else 0 end) as Mar
from foo
group by Produto



--TRANSFORMANDO LINHAS EM COLUNAS NO SQL SERVER 2005

select Produto,[1] as Jan, [2] as Fev,[3] as Mar

from

(
   select Valor,Mes,Produto
   from foo
) p PIVOT
(sum(Valor) for Mes in ([1],[2],[3]) ) as foo

TOP

O Top foi inserido no SQL 7.0, porém esta clausula no SQL 2005 traz algumas alterações. Permite, por exemplo, o número da percentagem a ser retornada em um SELECT. E pode também ser utilizada também para INSERT, UPDATE e DELETE.

Ex:
-- Retorna Linha 1 e Linha 2
SELECT TOP(2) * FROM alunos

--Atualiza Linha 1 e Linha 2 para 'S'
UPDATE TOP(2) alunos
SET Col1='S’

--Apaga as 2 primeiras linhas onde 'S' foi apagado
DELETE TOP(2) alunos

NTILE

Esta função nos permite separar o resultado de uma Query em um determinado número de grupos de acordo com uma ordem.
Ex:
SELECT   Vendedor,
                 Produto,
                 Quantidade,
                 ROW_NUMBER() OVER(ORDER BY Quantidade DESC) AS Numero,
                 NTILE(3) OVER(ORDER BY Quantidade DESC) as Grupo
FROM   Analise_Vendas
ORDER BY Quantidade DESC

RANK() e DENSE_RANK()

RANK e DENSE_RANK atribuem o mesmo valor para as colunas que possuem o mesmo valor dentro da ordem qe foi estabelecida.

Ex:
SELECT    Vendedor, Produto, Quantidade,
                  ROW_NUMBER() OVER(ORDER BY Quantidade ASC) AS Numero,
                  RANK() OVER(ORDER BY Quantidade asc) AS Rank,
                  DENSE_RANK() OVER(ORDER BY Quantidade ASC) AS DenseRank
FROM Analise_Vendas ORDER BY Quantidade asc