Usuário com melhor resposta
Verificar se o registro foi realmente inserido?

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
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.
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
-
É 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.