none
Cursor no SQL Server 2012 RRS feed

  • Pergunta

  • Boa tarde,

    Estou com problema com cursor. Quando executo com SELECT TOP 10000, executa sem erro, porém quando tento executar direto ocorre o erro

    "Could not complete cursor operation because the table schema changed after the cursor was declared."

    Alguém tem alguma ideia? 

    Obrigado !

    Segue codigo:

    DECLARE @ID INT, @CNPJ VARCHAR(8), @RETORNO VARCHAR(MAX)

    DECLARE cursorSerasaDet CURSOR LOCAL FOR

                 SELECT ID_PESQUISA, CNPJ, RETORNO FROM db_financeiro.dbo.TB_SERASA_PESQUISA (NOLOCK)

                 WHERE

                        (

                               RETORNO LIKE '%L040102%'

                        /*     RETORNO LIKE '%L040201%' OR

                               RETORNO LIKE '%L040301%' OR

                               RETORNO LIKE '%L040401%' OR

                               RETORNO LIKE '%L040501%' OR

                               RETORNO LIKE '%L040601%' OR

                               RETORNO LIKE '%L040701%' OR

                               RETORNO LIKE '%L040801%' OR

                               RETORNO LIKE '%L040901%' OR

                               RETORNO LIKE '%L041001%' OR

                               RETORNO LIKE '%L041101%'*/

                        )

                        AND RETORNO NOT LIKE '#INI%'

    OPEN cursorSerasaDet

    FETCH NEXT FROM cursorSerasaDet INTO @ID, @CNPJ, @RETORNO  

    WHILE @@FETCH_STATUS = 0

                 BEGIN

                        EXECUTE db_financeiro.dbo.PC_RELATO_ATUAL_2 @CNPJ, @ID, @RETORNO;

                        EXECUTE db_financeiro.dbo.PC_RELATO_HISTORICO_2 @CNPJ, @ID, @RETORNO;

                        FETCH NEXT FROM cursorSerasaDet INTO @ID, @CNPJ, @RETORNO;

                 END

           CLOSE cursorSerasaDet

           DEALLOCATE cursorSerasaDet

    sexta-feira, 24 de outubro de 2014 19:12

Respostas

  • Deleted
    sábado, 25 de outubro de 2014 08:49
  • Johnatan,

    Concordo plenamente com o Jose.Diz nas observações que ele esta destacando.

    Eu particularmente utilizaria a System Stored Procedure SP_Recompile para forçar a atualização de Plano de Execução da sua Tabela antes de fazer qualquer alteração no Cursor.

    Agora vale também avaliar e verificar senão ocorreu alguma alteração nas definições da sua tabela, dentre ela o nome do Schema.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sábado, 25 de outubro de 2014 17:00

Todas as Respostas

  • Olá Johnatan Santana

    Para teste tente remover o (NOLOCK), pois acredito que ele seja o problema.

    Att,

    E.M.


    Se a resposta foi útil marcar 'como resposta'.

    sábado, 25 de outubro de 2014 03:11
  • Deleted
    sábado, 25 de outubro de 2014 08:49
  • Johnatan,

    Concordo plenamente com o Jose.Diz nas observações que ele esta destacando.

    Eu particularmente utilizaria a System Stored Procedure SP_Recompile para forçar a atualização de Plano de Execução da sua Tabela antes de fazer qualquer alteração no Cursor.

    Agora vale também avaliar e verificar senão ocorreu alguma alteração nas definições da sua tabela, dentre ela o nome do Schema.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sábado, 25 de outubro de 2014 17:00
  • José Diz,

    Obrigado, era exatamente isso !

    segunda-feira, 27 de outubro de 2014 10:35