Como remover uso de cursores, utilizando CTEs
Galera, vou publicar um e-mail que na época mandei apenas para o pessoal daqui da empresa, talvez a informação seja útil pra vocês.
—————————–
Pessoal a fim de informação segue uma dica de como transformar isso:
Nisso:
Sem usar cursor
DECLARE @Tab TABLE(Val_Min Int, Val_Max Int)
INSERT INTO @Tab(Val_Min, Val_Max) VALUES(1,3)
INSERT INTO @Tab(Val_Min, Val_Max) VALUES(15,20);
INSERT INTO @Tab(Val_Min, Val_Max) VALUES(6,9);
SELECT * FROM @TAB
— Cria tabela sequencial que vai de 1 a 100, pode ser qualquer tipo de tabela, neste caso usei a
— funcionalidade de CTE.
WITH Sequencial AS(
SELECT 1 as ID
UNION ALL
SELECT ID + 1
FROM Sequencial
WHERE ID < 100)
— Retorna os dados
SELECT Val_Min, Val_Max, ID
FROM @TAB a
INNER JOIN Sequencial s
ON s.ID >= a.Val_Min
AND s.ID <= a.Val_Max
ORDER BY a.Val_Min, a.Val_Max, s.ID
Esta tabela auxiliar que vai de 1 a 100, serve para bastante coisa.
Aproveito para refazer o convite de cadastrarem meu blog no RSS de seu outlook. Normalmente dicas como essa coloco lá, assim só lê quem tiver interesse.
Segue o link http://fabianosqlserver.spaces.live.com/feed.rss
É só cadastrar em Ferramentas\Configurações de Conta\RSS Feeds\