Ir para conteúdo
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

creio que basta

 

CREATE TRIGGER atualizaData

ON cadastro

BEFORE INSERT,UPDATE

AS

BEGIN

  NEW.Update_data = GETDATE()

END;

 

Ao menos no Oracle é assim

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Fábão Ramos
      Boa tarde Pessoal!! estou com um problema que acho que sou o único com este mesmo problema kkkk pois procurei em tudo que foi lugar um esclarecimento de como resolver e nada.
      Bom vamos ao que importa.
      tenho um formulário em metodo post que será auto preenchido depois que eu conseguir aplicar o que tenho a duvida.
       
      <form action="caixa.php" method="post">
      <B>Selecione a Refeição:</B><br>
      <input type=checkbox name="pratos[]" value="Feijão"> Feijão<br>
      <input type=checkbox name="pratos[]" value="Arroz"> Arroz<br>
      <input type=checkbox name="pratos[]" value="Fritas"> Fritas<br>
      <input type=checkbox name="pratos[]" value="Farofa"> Farofa<br>
      <input type=checkbox name="pratos[]" value="Bife"> Bife<br>
      <input type=checkbox name="pratos[]" value="frango"> frango<br>
      <input type=checkbox name="pratos[]" value="ovo"> ovo<br>
      <input type=checkbox name="pratos[]" value="Churrasco"> Churrasco<br><BR>
      <input type=submit>
      </form>
      <?php
      $pratos = isset($_POST['pratos']) ? $_POST['pratos'] : '';    
      if(!$pratos!="Registrar")
      {
      // Verifica se usuário escolheu algum número
      if(isset($_POST["pratos"]))
      {
         foreach($_POST["pratos"] as $complemento)
          {
              echo "- " . $complemento . "<BR>";
          }
          
      }
      else
      {
          echo "Você não escolheu Seu Prato ainda!<br>";
      }}
      ?>
      esta meio zuado pq sou bem novato mais esta funcionando o resultado do "checkbox" esta vindo só que separadamente preciso unir os dados pois a aplicação dele será imput em sql server para que os pedidos ja saiam no monitor dentro da cozinha com as opções escolhidas sei que não é muito difícil colocar " $complemento[0].$complemento[1].$complemento[2] etc.. pelo que vi seria mais ou menos assim que eu agruparia o valor mais existe um problema o Form será auto preenchido por uma busca em sql server pois existe feijão preto feijão branco feijão mulatinho etc... e ter que preencher isso tudo sem nem ao menos saber se vai ter este prato no dia é bem inviável e a qtd de linhas será absurda então preciso agrupar o resultado para aplicar o envio do mesmo para o sql server indiferente das opções escolhidas se puderem me ajudar agradeço.
       
      este é o mesmo arquivo esta mostrando o resultado onde cadastra só para ficar mais rápido o desenvolvimento caixa.php
    • Por gei
      Boa noite.
      Tenho um display que deverá exibir produtividade de alguns setores por dia, Mês, e retornar o percentual de meta de acordo com os valores dos dias, semanas e meses.
      O total diário está tranquilo mas, como retornar o total  semanal, mensal e percentual alcançado?
      Estou há mais de uma semana tentando resolver.
      Estou usando o SQLSERVER 2017.
      Se alguém puder ajudar agradeço.
       
      SELECT REGISTRO_ATENDIMENTO_INTERNO_PSP.UsuarioInsert, DEPARTAMENTOS.NomeDepartamento,
      COUNT(REGISTRO_ATENDIMENTO_INTERNO_PSP.DataAtendimento) AS "Total Diário", COUNT(REGISTRO_ATENDIMENTO_INTERNO_PSP.DataAtendimento) AS "Total Semanal", COUNT(REGISTRO_ATENDIMENTO_INTERNO_PSP.DataAtendimento) AS "Total Mensal" FROM REGISTRO_ATENDIMENTO_INTERNO_PSP  INNER JOIN DEPARTAMENTOS  ON REGISTRO_ATENDIMENTO_INTERNO_PSP.IdDepartamento=DEPARTAMENTOS.IdDepartamento INNER JOIN COLABORADOR ON REGISTRO_ATENDIMENTO_INTERNO_PSP.IdFunc=COLABORADOR.IdFunc where convert(char(10),DataAtendimento,103) = convert(char(10),getdate(),103) GROUP BY REGISTRO_ATENDIMENTO_INTERNO_PSP.UsuarioInsert, DEPARTAMENTOS.NomeDepartamento 
    • Por gmadeira
      Boa tarde, tenho 2 tabelas "prodvdarm" que cadastro produtos de ema empresa com:
      codVendedor - int,
      codArmar - int,
      quantidade int,
      valor - numeric 12,2,
      dataentra - data tabela "entradarm"
      codVendedor - int,
      codArmar - int,
      quantidade int,
      valor - numeric 12,2,
       
      Conheço pouco de triggers então pelos exemplos tentei fazer esta que te enviei, preciso de uma para entrar com os dados checar se existe este código vendedor e código armarinho, existindo atualiza(update) a quantidade e o valor - se não existir entra com novos dados(insert) fia assim mais ta dando erro
       
      CREATE DEFINER=`root`@`localhost` TRIGGER `bailledados`.`trg_entradarm_entrada` BEFORE INSERT ON `entradarm` FOR EACH ROW BEGIN declare codVendedor int; declare codArmar int; select codVendedor codArmar from prodvdmat; IF (codVendedor <> new.codVendedor and codArmar <> new.codArmar) then insert into prodvdmat(codVendedor, codArmar, quantidade, valor, datacompra) values (new.codVendedor, new.codArmar, new.quantidade, new.valor, now()); else UPDATE prodvdmat SET quantidade = quantidade + new.Quantidade, valor = valor + new.valor WHERE codVendedor = new.codVendedor and codArmar = new.codArmar; end if; END  
    • Por flaviocarvalho
      Olá, 
      Preciso de ajuda para criar um sql q delete registro com mais de 10 dias de sua criação No BD SqlServer.
      Obs: Os 10 primeiros dias precisam permanecer na tabela.
       
       
    • Por gmadeira
      Boa tarde,
       
      Tenho a seguinte tabela:
       
      CREATE TABLE prodvdedor (
      codPrdvdor int(10) NOT NULL AUTO_INCREMENT,
      codVendedor int(11) NOT NULL,
      codTecido int(11) NOT NULL,
      codCor int(11) NOT NULL,
      medida decimal(10,2) DEFAULT NULL,
      stockMedidas decimal(10,2) DEFAULT NULL,
      peso decimal(10,4) DEFAULT NULL,
      stockPeso decimal(10,4) DEFAULT NULL,
      dataCompra date NOT NULL,
      valor decimal(10,2) NOT NULL,
      PRIMARY KEY (codPrdvdor),
      KEY PK_prodvdedor_vendededor_idx (codVendedor),
      KEY Pk_prodvdedor_tecidos_idx (codTecido),
      KEY Pk_prodvdedor_cores_idx (codCor),
      CONSTRAINT Pk_prodvdedor_cores FOREIGN KEY (codCor) REFERENCES cores (codCor) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT Pk_prodvdedor_tecidos FOREIGN KEY (codTecido) REFERENCES tecidos (codTecido) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT PK_prodvdedor_vendedores FOREIGN KEY (codVendedor) REFERENCES vendedores(codVendedor) ON DELETE CASCADE ON UPDATE CASCADE
      ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;Pciso criar uma trigger 
       
      preciso criar uma trigger para atualizar os campos stockMedidas e stockPeso, quando digito os dados ela procura se tem outra informação com os campos pedidos e atualiza, fiz da seguinte maneira:
       
      CREATE DEFINER=`root`@`localhost` TRIGGER `bailledados`.`trg_AtualizarProdVendor` BEFORE INSERT ON `prodvdedor` FOR EACH ROW BEGIN SET @stockAntigo = (SELECT stockMedidas FROM prodvdedor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor); UPDATE prodvdedor SET stockMedidas=@stockAntigo+new.medida WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor; SET @stockAntigo1 = (SELECT stockPeso FROM prodvdedor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor); UPDATE prodvdedor SET stockPeso=@stockAntigo1+new.peso WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor; SET @valorAntigo = (SELECT valor FROM prodvdedor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor); UPDATE prodvdedor SET valor=@valorAntigo1+new.valor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor; END  Só que não funciona da erro:
       
      insert 
          into
              bailledados.prodvdedor
              (codCor, codTecido, codVendedor, medida, stockMedidas, peso, stockPeso, dataCompra, valor) 
          values
              (?, ?, ?, ?, ?, ?, ?, ?, ?)
      WARN:   SQL Error: 1442, SQLState: HY000
      ERROR:   Can't update table 'prodvdedor' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
      Informações:   could not execute statement
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.