ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Return <> Rollback MSSQL

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
FernandoCartaxo
Novato
Novato


Registrado: Segunda-Feira, 27 de Março de 2006
Mensagens: 97

MensagemEnviada: Qua Fev 14, 2007 8:23 pm    Assunto: Return <> Rollback MSSQL Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
thomazs
Moderador
Moderador


Registrado: Segunda-Feira, 1 de Março de 2004
Mensagens: 2835

MensagemEnviada: Seg Fev 19, 2007 5:34 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB