none
Trigger - Atualizar só último registro inserido com um valor sem usar Constraint RRS feed

  • Pergunta

  • Olá amigos!

    Estou numa dúvida cruel...
    Preciso criar uma trigger que faça update no campo "CountryCode" para 'BR' toda vez que se fizer INSERT.

    Exemplo: Na tela de cadastro o cliente pode colocar que pertence a qualquer pais: JP, BR, US, CA. Então quero que toda vez que se fizer um insert na tabela Cliente, a Trigger faça update no campo CountryCode e jogue 'BR' lá no registro ONDE o CountryCode inserido for exclusivamente igual a 'US' ou 'CA' porque existem alguns cadastros antigos com countrycode = US e CA que são especificos e não quero mecher neles!


    Na minha cabeça veio o seguinte:
    Só que ele atualiza todos os registros.. só quero pro último inserido

    tabela - exemplo
    Clientes
    Id = int, sequencial, pk
    Nome = varchar (50)
    Countrycode = char (2)

    CREATE TRIGGER ATUALIZA_PAIS ON CLIENTE

    FOR INSERT
    AS
    UPDATE CLIENTE SET COUNTRYCODE = 'BR' WHERE COUNTRYCODE = 'US' OR COUNTRYCODE = 'CA'


    Acho que é isso..
    Obrigado

    Julio Ito

    terça-feira, 17 de fevereiro de 2009 18:37

Respostas

  • Julio,

    Por acaso o campo chave primária é um código sequêncial?

    Se for um código sequencial fica mais fácil, veja abaixo o exemplo:

    1 Create Table T1  
    2  (Codigo Int Identity(1,1),  
    3    CountryCode Char(2) Default '')   
    4      
    5      
    6 Insert Into T1 Default Values 
    7 Insert Into T1 Default Values 
    8 Insert Into T1 Default Values 
    9 Insert Into T1 Default Values 
    10 Insert Into T1 Default Values 
    11 Insert Into T1 Default Values 
    12        
    13       
    14 Select * from T1   
    15  
    16  
    17 Create Trigger T_AtualizarT1  
    18 On T1  
    19 After Insert 
    20 As 
    21  Begin 
    22   Update T1  
    23    Set CountryCode='BR' 
    24    Where Codigo = @@Identity   
    25  End   
    26  
    27    
    28 Insert Into T1 Default Values 
    29  
    30 Select * from T1   
    31   

    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    • Marcado como Resposta julio_ito terça-feira, 17 de fevereiro de 2009 19:11
    terça-feira, 17 de fevereiro de 2009 18:53

Todas as Respostas

  • Julio,

    Por acaso o campo chave primária é um código sequêncial?

    Se for um código sequencial fica mais fácil, veja abaixo o exemplo:

    1 Create Table T1  
    2  (Codigo Int Identity(1,1),  
    3    CountryCode Char(2) Default '')   
    4      
    5      
    6 Insert Into T1 Default Values 
    7 Insert Into T1 Default Values 
    8 Insert Into T1 Default Values 
    9 Insert Into T1 Default Values 
    10 Insert Into T1 Default Values 
    11 Insert Into T1 Default Values 
    12        
    13       
    14 Select * from T1   
    15  
    16  
    17 Create Trigger T_AtualizarT1  
    18 On T1  
    19 After Insert 
    20 As 
    21  Begin 
    22   Update T1  
    23    Set CountryCode='BR' 
    24    Where Codigo = @@Identity   
    25  End   
    26  
    27    
    28 Insert Into T1 Default Values 
    29  
    30 Select * from T1   
    31   

    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    • Marcado como Resposta julio_ito terça-feira, 17 de fevereiro de 2009 19:11
    terça-feira, 17 de fevereiro de 2009 18:53
  • Boa Tarde,

    Não acho que trigger seja a solução para esse problema. Se você utilizá-la serão duas transações (uma de INSERT e uma de UPDATE) para um único registro. Isso irá gerar um retardo desnecessário nas operações de INSERT.

    Sugiro que configure sua aplicação para substituir o país por BR quando o país informado for US ou CA. Se estiver em uma stored procedure fica ainda mais fácil.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com/

    Cálculos financeiros com SQL ? Clique abaixo:
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!361.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 17 de fevereiro de 2009 19:05
  • Perfeito Junior!
    Era isso mesmo!

    Quanto a sua opiniao Gustavo, eu naum tenho acesso aos asps, somente ao bd, intaum resolvi consertar pelo SQL msm..

    Muito obrigado!
    terça-feira, 17 de fevereiro de 2009 19:14
  • Olá Julio_ito,

    Nesse caso não há alternativas senão a trigger.
    Considere fazer a alteração na aplicação posteriormente para não onerar o banco.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com/

    Cálculos financeiros com SQL ? Clique abaixo:
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!361.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 17 de fevereiro de 2009 19:48