Usuário com melhor resposta
Duvida com Função ROW_NUMBER

Pergunta
-
Bom dia a todos, estou com a seguinte duvida, tenho duas tabelas uma é de produtos e uma outra pra gera uma sequência criei uma proc que é rodada durante a madrugada que estara atualizando a segunda tabela (sequência) preciso que se não ouver o produto na tabela ele insira somando a ultima sequência +1, estou tentando faze isso utilizando a opção ROW_NUMBER mas não estou conseguindo pega a ultima sequência da tabela pra que o ROW_NUMBER continue fazendo a sequência, lembrando que pra faze isso não estou querendo utilizar cursor se ouver outra forma pra mim esta fazendo isso aceito opniões, obrigado a todos..
Respostas
-
Andre,
Nesse caso não seria melhor utilizar a propriedad Identity ao invês de trabalhar com este função Row_Number?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]- Marcado como Resposta Andre_Bel segunda-feira, 26 de abril de 2010 14:02
-
André, bom dia segue um exemplo q mostra os ids q estão faltando.
pode ser q seja útil.
DECLARE @Temp TABLE (CodNum Int) INSERT @Temp SELECT (01) UNION SELECT (02) UNION SELECT (03) UNION SELECT (05) UNION SELECT (07) UNION SELECT (08) UNION SELECT (09) UNION SELECT (10) SELECT Q.Prox FROM ( SELECT CodNum,(SELECT MIN(CodNum) FROM @Temp AS A WHERE A.CodNum > B.CodNum) - 1 AS Prox FROM @Temp AS B ) AS Q WHERE CodNum != Prox
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino- Marcado como Resposta Andre_Bel segunda-feira, 26 de abril de 2010 14:02
Todas as Respostas
-
Boa Tarde Andre,
Se a tabela "SEQUENCIA" guarda todos os Id's já inseridos na tabela "PRODUTO", então pra descobrir o próximo número da sequencia, acredito que o código abaixo resolve:
DECLARE @ProximoId INT SELECT @ProximoId = MAX(Id) + 1 FROM Sequencia
Espero ter ajudado.
Abraço
hã? -
Boa noite Dtito, obrigado pela colaboração. MAs como irei inserir todos os registros que não existam na tabela de sequência ??? segue meu script:
-- Achar o ultimo sequencial da tabela Z_PROSEQ
SELECT @V_sequen = MAX( sequen )
FROM widl.Z_PROSEQSET @V_sequnc1 = 1
PRINT 'SEQUÊNCIA _' + CONVERT(CHAR,@V_procod)
--Conta quantos registros não existem na tabela Z_PROSEQ
SELECT @V_cont = COUNT(*)
FROM widl.PROD01 a1
WHERE NOT EXISTS( SELECT * FROM widl.Z_PROSEQ a2 WHERE a1.procod = a2.procod )PRINT 'PRODUTO _' + CONVERT(CHAR,@V_procod)
BEGIN TRAN
WHILE @V_cont >= @V_sequnc1
BEGIN
SET @V_sequen = @V_sequen + 1
SET @V_sequnc1 = @V_sequnc1 + 1PRINT 'SEQUÊNCIA WHILE' + CONVERT(CHAR,@V_sequen)
INSERT INTO widl.Z_PROSEQ
SELECT a1.procod, @V_sequen
FROM widl.PROD01 a1 LEFT JOIN widl.Z_PROSEQ a2 ON a1.procod = a2.procod
WHERE NOT EXISTS(
SELECT a2.procod
FROM widl.Z_PROSEQ a2
WHERE a2.procod = a1.procod
)PRINT 'INSERT'
UPDATE widl.PROD01
SET proems = (
SELECT sequen
FROM widl.Z_PROSEQ
WHERE widl.Z_PROSEQ.procod = widl.PROD01.procod
)
IF @@ERROR <> 0
BEGIN
COMMIT TRAN
PRINT 'SUCESSO!!!'
END
ELSE
BEGIN
ROLLBACK TRAN
PRINT 'FUDEU'
END
END -
Andre,
Nesse caso não seria melhor utilizar a propriedad Identity ao invês de trabalhar com este função Row_Number?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]- Marcado como Resposta Andre_Bel segunda-feira, 26 de abril de 2010 14:02
-
André, bom dia segue um exemplo q mostra os ids q estão faltando.
pode ser q seja útil.
DECLARE @Temp TABLE (CodNum Int) INSERT @Temp SELECT (01) UNION SELECT (02) UNION SELECT (03) UNION SELECT (05) UNION SELECT (07) UNION SELECT (08) UNION SELECT (09) UNION SELECT (10) SELECT Q.Prox FROM ( SELECT CodNum,(SELECT MIN(CodNum) FROM @Temp AS A WHERE A.CodNum > B.CodNum) - 1 AS Prox FROM @Temp AS B ) AS Q WHERE CodNum != Prox
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino- Marcado como Resposta Andre_Bel segunda-feira, 26 de abril de 2010 14:02
-
André,
Você chegou a pensar na possibilidade de utilizar o Identity?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário] -
Bom dia a todos, obrigado Leonardo pela força, Junior realmente não avia pensado na possibilidade, fiz os testes utilizando o IDENTITY e deu certinho como eu precisava, muito obrigado, Leonardo farei um teste com a sua solução pra que eu possa esta utilizando ela em uma outra proc qualquer, obrigado...