 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
FernandoCartaxo Novato

Registrado: Segunda-Feira, 27 de Março de 2006 Mensagens: 97
|
Enviada: Qua Fev 14, 2007 8:23 pm Assunto: Return <> Rollback MSSQL |
|
|
Bem, não é bem uma dúvida e nem uma dificuldade, é porque eu não entendi o porquê de não está funcionando de um jeito, já procurei no google por isso e não achei, por isso venho a postar neste forúm.
Eu simplifiquei o "desentendimento" em uma outra trigger, que ocorre exatamente igual na qual eu havia repareado o erro.
Eu crio uma trigger de insert para verifcar alguns valores do registro, me retornar uma mensgem de erro, e a depender dela, gravar ou não na tabela:
segue o código:
| Código: | ALTER TRIGGER dbo.CDE_TELEFONE_INS ON dbo.CDE_TELEFONE FOR INSERT
AS
BEGIN
DECLARE @TEL_NUM VARCHAR(50),
@PES_COD INT
SELECT @TEL_NUM = TEL_NUM,
@PES_COD = PES_COD
FROM INSERTED
-- VERIFICA SE O TELEFONE QUE IRÁ SER CADASTRADO PERTENCE A PESSOA PARA QUAL O TELFONE SERÁ CADASTRADO
IF ((SELECT COUNT(*) FROM CDE_TELEFONE WHERE TEL_NUM = @TEL_NUM AND PES_COD = @PES_COD) > 1)
BEGIN
RAISERROR('JÁ CADASTRADO',16,1)
RETURN -- ROLLBACK --
END ELSE
BEGIN
--VERIFICA SE O TELEFONE JÁ É CADASTRADO
IF ((SELECT COUNT(*) FROM CDE_TELEFONE WHERE TEL_NUM = @TEL_NUM) > 1)
BEGIN
RAISERROR('TELEFONE EXISTENTE PARA OUTRA PESSOA',16,1)
--RETURN
END
END
END |
no primeiro IF, quando uso o return, ele não aborta tudo do que está fazendo e para por ali, ele apresenta a mensagem de erro e depois grava o registro, agora quando eu tiro o return e coloco o rollbak, ele apresenta a mensagem de erro e não grava o registro.
no caso, quando devo usar return e rollback? é correto está usnado o rollback? por que o return não funciona?
lembrando que estou fazendo os inserts via banco, não via aplicação |
|
| Voltar ao Topo |
|
 |
thomazs Moderador


Registrado: Segunda-Feira, 1 de Março de 2004 Mensagens: 2835
|
Enviada: Seg Fev 19, 2007 5:34 pm Assunto: |
|
|
O Rollback é para desfazer as ações já realizadas no banco, enquanto o return (sem parâmetros se não estou enganado) é para finalizar o procedimento, mantendo as alterações (mesmo após mostrar as mensagens de erro). Não me lembro direito se é no MSSQL, que se é colocado um determinado parâmetro para o return, a inserção é cancelada. _________________ Suporte e Consultoria em Desenvolvimento de Sistemas
Bacharel em Sistemas de Informação
Especialista em Bancos de Dados
Desenvolvimento: Clipper, Delphi, PHP, Python/Django |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|