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.
quarta-feira, 22 de dezembro de 2010
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.
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
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
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
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
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
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
Assinar:
Comentários (Atom)