Início > Banco de dados, SQL Server > Procedure com tabela temporária

Procedure com tabela temporária

A algumas semanas atrás precisei montar um script para verificar em que nível está cada produto dentro de uma categoria. Vale a pena documentar e lembrar a utilização de tabela temporária.

—————————-

CREATE TABLE #CategoriaNivel (
idCategoria int NOT NULL,
idCategoriaPai int NULL,
ultimoNivel bit NOT NULL)

-- INICIALIZA AS VARIÁVEIS
DECLARE @idcat INTEGER;
DECLARE @idcatPai INTEGER;
DECLARE @idcatTemp INTEGER;
DECLARE @nivel bit;

set @idcat = NULL;
set @idcatPai = NULL;
set @idcatTemp = NULL;
set @nivel = NULL;
-- Declara cursor
DECLARE db_cursorAllCategorias CURSOR FOR
SELECT idCategoria, idCategoriaPai from Categoria with (NOLOCK)

OPEN db_cursorAllCategorias
FETCH NEXT FROM db_cursorAllCategorias INTO @idcat, @idcatpai;

-- LOOP NOS REGISTROS SELECIONADOS
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- COLOQUE AQUI OS COMANDOS SQL DA SUA PROCEDURE

set @idcatTemp = null;

SELECT @idcatTemp = idCategoria from categoria with (NOLOCK) 
where idCategoriaPai = @idcat;

if @idcatTemp is null
BEGIN
set @nivel = 1
END
else
BEGIN
set @nivel = 0
END

INSERT INTO #CategoriaNivel(idCategoria,idCategoriaPai,ultimoNivel) 
VALUES(@idcat, @idcatpai, @nivel)
-- BUSCA AS INFORMAÇÕES DO PRÓXIMO REGISTRO
FETCH NEXT FROM db_cursorAllCategorias INTO @idcat, @idcatpai;
END
-- (FIM DO LOOP NOS REGISTROS SELECIONADOS) ///

-- FECHA E DESTROI O CURSOR
CLOSE db_cursorAllCategorias;
DEALLOCATE db_cursorAllCategorias;

--------

-- Validação
/*
SELECT * from categoria where idCategoriaPai IN(
SELECT idCategoria
FROM #CategoriaNivel
where ultimoNivel =1)
*/
select count(*) TOTPRODUTOSNIVELINTERMEDIARIO from produto
where idCategoria in(
SELECT idCategoria
FROM #CategoriaNivel
where ultimoNivel = 0)
and FlagAtiva = 1

select count(*) TOTPRODUTOSULTIMONIVEL from produto
where idCategoria in(
SELECT idCategoria
FROM #CategoriaNivel
where ultimoNivel = 1)
and FlagAtiva = 1

drop table #CategoriaNivel

—————————-

Anúncios
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

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

%d blogueiros gostam disto: