none
Verificar se o registro foi realmente inserido? RRS feed

  • Pergunta

  • Ola pessoal, gostaria de saber se tem como verificar se o registro foi realmente executado, pois estou executando um determinado código, que por ventura o parâmetro (xml) pode vir null, entretanto, ele passa pelo @@Error, que no caso esta verificando se possui efetivamente algum erro, como o parametro esta vazio, ele passa pro próximo insert, o que não deveria ocorrer, segue meu código:

        DECLARE @tpPreecheCampos TABLE ( acessoperfis_setape uniqueidentifier,
                                         idclasse_setape uniqueidentifier,
                                         valor varchar(20)
                                        )
        
        DECLARE @acessoperfis_setape uniqueidentifier,
                @idclasse_setape uniqueidentifier,
                @valor varchar(20)
        
    -- Cria uma representação interna do documento XML    
    EXEC sp_xml_preparedocument @docHandle OUTPUT, @pPerfis
    INSERT INTO @tpPreecheCampos    
    SELECT *
    FROM OPENXML (@docHandle, 'CampoPerfil/Campo', 2)
         WITH ( IdAcessoPerfil_setape uniqueidentifier     'Acesso_Perfil/@Idacessoperfis_setape',
                IdClasse_setape uniqueidentifier           'Classe/@Idclasse_setape',
                valor varchar(20)                          'Valor/@valorInserido'
               )
          
              
    -- Remove a representação interna do documento XML.          
    EXEC sp_xml_removedocument @docHandle
                 
                 
        WHILE ( SELECT COUNT(*) FROM @tpPreecheCampos) > 0
        BEGIN
            
        SELECT TOP 1 @acessoperfis_setape = [acessoperfis_setape], 
                     @idclasse_setape = [idclasse_setape],
                     @valor = [valor]
        FROM @tpPreecheCampos  
      
            
        EXEC [dbo].[sp_tbpreecheCampos_INSERT]  @newID, @acessoperfis_setape, @idclasse_setape, @valor, @pCriadopor
        -->>> VERIFICAR AQUI SE A PROCEDURE REALMENTE INSERIU ALGO <<<--  
            IF @@ERROR <> 0 
            BEGIN
                
                SELECT @Msg = ERROR_MESSAGE()
                RAISERROR (@Msg, 11, 2)
                ROLLBACK TRANSACTION
            END 
             
           
        DELETE FROM @tpPreecheCampos WHERE  [acessoperfis_setape] = @acessoperfis_setape
                                          
         
        END
        

    quinta-feira, 3 de maio de 2012 13:29

Respostas

  • É mais ou menos isso Daniel, o @valor é uma 'tag' dentro do xml, que também compoe o bloco xml. No caso, o que receberá o xml como um todo é onde realizo a representação interna do parâmetro @pPerfis, o xml é informado por esse parametro. Mas a sua sujestão me clareou um pouco as idéias rs, nas variaveis table, dexei explicito que os atributos não podem ser nulos, dai quando for realizada a leitura do xml e se este estiver vazio, na hora de passar os valores pra temp, acredito eu que entrará no exception. Postarei um novo aply caso funcione, muito obrigado.

    @Edit
    Resolvido dessa maneira, obrigado.
    • Editado Evertoum quinta-feira, 3 de maio de 2012 19:46
    • Marcado como Resposta Evertoum sexta-feira, 4 de maio de 2012 18:34
    quinta-feira, 3 de maio de 2012 18:55

Todas as Respostas

  • Ola Evertoum,

    Se entendi bem, o seu problema é só quando o XML (estou supondo que é o @valor) está nulo, é isso mesmo? Caso afirmativo, vc poderia:

    1. Verificar se o valor do XML é nulo (@valor is null)

    2. A sua proc sp_tbpreecheCampos_INSERT deve fazer um insert do XML em alguma tabela. Vc pode especificar a coluna como not null, assim o insert gerará uma excecao que vc conseguira capturar.

    Provavelmente a sua verificacao esta passando pois, apesar do XML ser nulo, a insercao ocorreu com sucesso.

    Abracos, Daniel. 


    -- Se minha sugestão ajudou, por favor marque-a como útil; Se resolveu a questão, por favor marque-a como resposta. Contribua para melhorar o fórum! | daniel@dimamura.com.br

    • Sugerido como Resposta dimamura sexta-feira, 4 de maio de 2012 11:56
    quinta-feira, 3 de maio de 2012 16:54
  • É mais ou menos isso Daniel, o @valor é uma 'tag' dentro do xml, que também compoe o bloco xml. No caso, o que receberá o xml como um todo é onde realizo a representação interna do parâmetro @pPerfis, o xml é informado por esse parametro. Mas a sua sujestão me clareou um pouco as idéias rs, nas variaveis table, dexei explicito que os atributos não podem ser nulos, dai quando for realizada a leitura do xml e se este estiver vazio, na hora de passar os valores pra temp, acredito eu que entrará no exception. Postarei um novo aply caso funcione, muito obrigado.

    @Edit
    Resolvido dessa maneira, obrigado.
    • Editado Evertoum quinta-feira, 3 de maio de 2012 19:46
    • Marcado como Resposta Evertoum sexta-feira, 4 de maio de 2012 18:34
    quinta-feira, 3 de maio de 2012 18:55