none
Cursor + chave RRS feed

  • 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
    terça-feira, 14 de outubro de 2014 14:50

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
    terça-feira, 14 de outubro de 2014 16:32
    Moderador

Todas as Respostas

  • Deleted
    terça-feira, 14 de outubro de 2014 15:24
  • Precisa josé, infelizmente.

    Preciso tratar cada um dos registros, varrendo alguns dados usando chaves de outras tabelas.

    terça-feira, 14 de outubro de 2014 15:42
  • 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
    terça-feira, 14 de outubro de 2014 16:32
    Moderador
  • Durval, ja me ajudou bastante o que disse!

    Valeu pela fica.

    terça-feira, 14 de outubro de 2014 16:54