Jump to content
Robson Freitas

Criar Trigger para alterar registro somente na modificação de um campo em sql server

Recommended Posts

Tenho uma tabela de cadastro do SQL Server, tenho uma coluna que apresenta o status desse cadastro ('A','I','S','C').

 

Criei um campo com nome Update_data, que receberá um datatime toda vez que o cliente alterar o status do cadastro. Isso também vale para um insert.

 

Estou com dúvidas, pois nunca criei uma Trigger em sql server.

 

Ex: da minha tabela

 ID | Processo | status | Update_data

  1 | A33      | A      | null

2   | A34      | I      | null

3    | A55      |     A | null

 

Não consegui avançar no seguinte exemplo abaixo trigger: 

CREATE TRIGGER atualizaData

ON cadastro

AFTER INSERT,UPDATE

AS

IF INSERT OR UPDATE(status)

BEGIN
UPDATE cadastro SET Update_data = GETDATE()

WHERE id = id_que_foi_modifica/inserida

END

 

Ao final, será atualizado com a data atual somente se houver modificação ou inserção no campo da situação.

Share this post


Link to post
Share on other sites

creio que basta

 

CREATE TRIGGER atualizaData

ON cadastro

BEFORE INSERT,UPDATE

AS

BEGIN

  NEW.Update_data = GETDATE()

END;

 

Ao menos no Oracle é assim

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By luca0202
      ola fiz a instalação de um programa que eu fiz e deu o seguinte erro : SQL state: 42000 SQL error code 8179
      Não foi possivel encontrar a instrução preparada como o identificador - 1.
      O que pode ser ? estou usando componentes dbexpress
    • By gustavo491
      Tenho esse modelo de banco de dados com algumas informações cadastradas e preciso buscar atráves de um select  os Campeonato e Modalidades que uma pessoa não tem vinculo, porém já tentei de diversas maneira e não consegui exito, máximo que consegui foi buscar as modalidades que não existe ninguém cadastrado.

    • By pablwo
      CREATE TABLE FUNCIONARIO( MATRICULA NUMBER PRIMARY KEY, NOME VARCHAR2(100) ); CREATE TABLE DEPENDENTE( CPF VARCHAR2(14) PRIMARY KEY, NOME VARCHAR2(100), MATRICULA_FUNCIONARIO NUMBER, CONSTRAINT fk_dependente_matricula FOREIGN KEY (matricula_funcionario) REFERENCES FUNCIONARIO(matricula) ); CREATE OR REPLACE TRIGGER QUANTIDADE_DE_DEPENDENTE BEFORE INSERT OR UPDATE ON DEPENDENTE FOR EACH ROW BEGIN IF:NEW.MATRICULA_FUNCIONARIO IN (SELECT MATRICULA_FUNCIONARIO FROM DEPENDENTE HAVING COUNT(MATRICULA_FUNCIONARIO) >= 3 GROUP BY MATRICULA_FUNCIONARIO) THEN RAISE_APPLICATION_ERROR(-20000, 'Funcionario Excedeu a Quantidade de Dependentes'); END IF; END; Boa noite, estou com dificuldades em criar triggers no sql oracle. Minha dificuldade é criar um trigger que so permita que um funcionario tenha no maximo 3 dependetes, acredito que o erro seja no select dentro do if, quando eu troco por valores como (1,2,3) esses valores servem como matriculas de funcionários que não é mais permitido adicionar dependentes.
    • By RVenancio
      Fiz uma trigger pra atualizar o valor do salário montante de uma agencia de banco usando o seguinte código:
       
      CREATE DEFINER = CURRENT_USER TRIGGER `NB`.`Funcionario_AFTER_INSERT` AFTER INSERT ON `Funcionario` FOR EACH ROW
      BEGIN
       
      UPDATE agencia a SET salarioMont = (SELECT SUM(salario) FROM funcionario f WHERE f.idAg = a.idAgencia)
      WHERE a.idAgencia = new.idAg;
       
      END
       
      o problema em si é que estou obtendo o erro: "Error Code: 1054. Unknown column 'idAg' in 'NEW'" quando vou executar o scritp.
       
    • By SILVASS
      Ola,  ja começo pedindo desculpa por mais esse tópico, mas eu realmente não consegui achar nada que me ajudasse.
      Eu preciso criar uma trigger ou qualquer outro procedimento, que me permite incluir todos os dados da tabela principal na tabela histórico a cada alteração/inserção.
       
       
      Está é a trigger que tenho, ela só me retorna o dado alterado/inserido.
          FOR UPDATE, INSERT  AS    BEGIN        SET NOCOUNT ON        INSERT INTO tb_historico  (id_beneficio, habitantes, ano, dh_update)            SELECT id_beneficio, habitantes, ano,  GETDATE()            FROM INSERTED            END
      O dados na minha tabela são os seguintes:
      id     habitante    ano
      1    10000     2019
      2    20000     2019
      3    30000     2019


      Alterei a primeira linha
      id     habitante    ano
      1    50000    2019
      2    20000     2019
      3    30000     2019


      preciso que além do dado alterado, me retorne os dados que não sofreram nenhuma modificação
      id     habitante    ano     
      1    50000    2019
      2    20000     2019
      3    30000     2019


      Hoje o retorno dela seria apenas o dado alterado.
      id     habitante    ano
      1    50000    2019  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.