Usuário com melhor resposta
Cursor + chave

Pergunta
-
Boa tarde pessoal!
Estou montando uma procedure, que testa 3 condições e gostaria de saber se é possível fazer minha lógica.
Tenho que abrir um cursor e testar 3 chaves do registro atual e comparar com o anterior, se ele for igual, descarta, se for diferente faz um insert.
Só que ao invés de criar if (else) 3 vezes nas três condições para saber se os três são iguais ou se tem algum dos campos que sejam diferente, posso juntar tudo em uma e testar?
Declare @ChaveUnica varchar(100 ) declare @ChaveAnterior varchar(100 )
set @ChaveAnterior = '0' Declare c_cursor12 Cursor LOCAL FAST_FORWARD For SELECT consulta; While (@@FETCH_STATUS = 0) BEGIN set @ChaveUnica = @chave1 + @chave2 + @chave3 if @ChaveUnica <> @ChaveAnterior Begin -- faz função 1 + set @ChaveAnterior = @chave1 + @chave2 + @chave3 End ELSE begin -- faz função end END
...
Todos os campos são varchar, nenhum vem nulo.
Minha lógica seria a ideal?
- Editado Paulo.Sérgio terça-feira, 14 de outubro de 2014 14:59
Respostas
-
Paulo,
Não ficou muito claro para mim qual é o intuito desta verificação, de qualquer modo fica um pouco difícil afirmar se sua lógica é a ideal porque seria necessário você indicar mais detalhes sobre a consulta que você deseja realizar.
Caso este seja o ideal, ainda assim eu adicionaria um separador entre cada chave, porque com o tempo poderá ocorrer uma mudança na estrutura das chaves ou um número de uma das chaves pode ultrapassar a expectativa e ser maior do que o esperado, alterando o tamanho das chaves concatenadas e futuras identificações.
Segue uma idéia para manter às chaves separadas, adicionando "pipe" entre cada variável:
set @ChaveUnica = @chave1 + '|' + @chave2 + '|' + @chave3 if @ChaveUnica <> @ChaveAnterior Begin -- faz função 1 + set @ChaveAnterior = @chave1 + '|' + @chave2 + '|' + @chave3 End
Se possível, indique maiores informações sobre a consulta que você deseja realizar para que possamos ajudar a encontrar outras alternativas.
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Paulo.Sérgio terça-feira, 14 de outubro de 2014 16:53
Todas as Respostas
-
-
-
Paulo,
Não ficou muito claro para mim qual é o intuito desta verificação, de qualquer modo fica um pouco difícil afirmar se sua lógica é a ideal porque seria necessário você indicar mais detalhes sobre a consulta que você deseja realizar.
Caso este seja o ideal, ainda assim eu adicionaria um separador entre cada chave, porque com o tempo poderá ocorrer uma mudança na estrutura das chaves ou um número de uma das chaves pode ultrapassar a expectativa e ser maior do que o esperado, alterando o tamanho das chaves concatenadas e futuras identificações.
Segue uma idéia para manter às chaves separadas, adicionando "pipe" entre cada variável:
set @ChaveUnica = @chave1 + '|' + @chave2 + '|' + @chave3 if @ChaveUnica <> @ChaveAnterior Begin -- faz função 1 + set @ChaveAnterior = @chave1 + '|' + @chave2 + '|' + @chave3 End
Se possível, indique maiores informações sobre a consulta que você deseja realizar para que possamos ajudar a encontrar outras alternativas.
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Paulo.Sérgio terça-feira, 14 de outubro de 2014 16:53
-