none
TRIGGER SQL SERVER RRS feed

  • Pergunta

  • Pessoal, é o seguinte estou mudando meu banco de dados, do mysql para o sql server, e tenho varias triggers no mysql, e no mysql dentro da trigger para obter um valor inserido vc usa o 'new.campo' e deletar 'old.campo', e no sql server a alternativa que achei foi declarar uma variavel para cada campo e usar dentro do select com inserted, queria ver com vcs se tem alguma outra solução de fazer, pois tenho muitas triggers .Abaixo segue um exemplo do MYSQL e que eu fiz no SQL SERVER

    --MODELO MYSQL

    begin

     if((old.bx_etiqueta = 0 or old.bx_etiqueta is null) and new.bx_etiqueta=1) then
         begin
             update produto_etiqueta set dt_baixada = now(), OBS_BAIXA = concat('BAIXADA PELO SISTEMA DE ASSITENCIA: ', now(), ' - ' ,new.obs_analise) where cod_produto_etiqueta = new.cod_produto_etiqueta;       
         end;
     end if;

     if(new.dt_credito is not null and old.dt_credito is null and new.cod_cliente_credito is not null and new.valor_credito > 0) then
      begin
           set @crd = 0;
          select count(*) into @crd from cliente_vale where cod_assistencia = new.cod_assistencia;
           if(@crd <= 0) then
               insert into cliente_vale set
                   cod_colaborador = new.cod_cliente_credito,
                   tipo = 1,
                   data = new.dt_credito,
                   valor = new.valor_credito,
                   valor_usado = 0,
                   cod_usuario = new.cod_usuario,
                   motivo = 'SISTEMA ASSISTENCIA: VALOR REFERENTE A DIFERENÇA DE PEÇA DE SUBSTITUIÇÃO',
                   COD_ASSISTENCIA = new.cod_assistencia;               
           end if;
      end;
    end if;
     
      if(new.cod_produto_etiqueta_s is not null and new.cod_produto_etiqueta_s <> "" and new.dt_substituicao is not null) then

        begin
                set @v = 0;
                set @vn = 0;
                set @lj = 0;

                      update produto_etiqueta set dt_baixada = new.dt_substituicao, OBS_BAIXA = concat('BAIXADA PELO SISTEMA DE ASSITENCIA: ', new.dt_substituicao, ' - ' ,new.obs_substituicao) where cod_produto_etiqueta = new.cod_produto_etiqueta_s;
                      if(new.cod_loja <> @lj) then
                           update produto_etiqueta set COD_LOJA_ANTERIOR = @lj, COD_LOJA = new.cod_loja where cod_produto_etiqueta = new.cod_produto_etiqueta_s;
                      end if;     
                      update  balanco_etiqueta set baixa = 1, hora_baixa = now(), cod_usuario = new.cod_usuario, obs = 'SISTEMA DE ASSISTENCIA' where cod_produto_etiqueta = new.cod_produto_etiqueta_s;           

        end;
      end if;
    end

    --MODELO NO SQL SERVER

    CREATE TRIGGER [dbo].[t_bx_etq_assist]
       ON  [dbo].[assistencia]
       AFTER UPDATE
    AS
    BEGIN
        SET NOCOUNT ON;

        DECLARE @OLD_BX_ETIQUETA as INT;
        DECLARE @NEW_BX_ETIQUETA as INT;
        DECLARE @COD_ASSISTENCIA AS INT;
        DECLARE @obs_analise as VARCHAR(200);
        DECLARE @cod_produto_etiqueta as int;
        declare @new_dt_credito as date;
        declare @old_dt_credito as date;
        declare @new_cod_cliente_credito as int;
        declare @new_valor_credito as real;
        declare @new_tipo as int;
        declare @new_cod_usuario as int;
        declare @new_cod_produto_etiqueta_s as int;
        declare @new_dt_substituicao as date;
        declare @new_obs_substituicao as varchar(255);
        declare @new_cod_loja as int;

        SELECT
            @NEW_BX_ETIQUETA = BX_ETIQUETA,
            @COD_ASSISTENCIA = cod_assistencia,
            @obs_analise = obs_analise,
            @cod_produto_etiqueta = cod_produto_etiqueta,
            @new_dt_credito = dt_credito,
            @new_cod_cliente_credito = COD_CLIENTE_CREDITO,
            @new_valor_credito = VALOR_CREDITO,
            @new_cod_usuario = cod_usuario,
            @new_cod_produto_etiqueta_s = cod_produto_etiqueta_s,
            @new_obs_substituicao = obs_substituicao,
            @new_cod_loja = cod_loja
        FROM inserted;

        SELECT
            @old_BX_ETIQUETA = BX_ETIQUETA,
            @old_dt_credito = dt_credito
        FROM deleted;

        if ((@OLD_BX_ETIQUETA =0 or @OLD_BX_ETIQUETA is null) and @NEW_BX_ETIQUETA = 1)
            begin
                update produto_etiqueta set DT_BAIXADA = CURRENT_TIMESTAMP,
                OBS_BAIXA = concat('BAIXADA PELO SISTEMA DE ASSITENCIA: ', CURRENT_TIMESTAMP, ' - ' ,@obs_analise) where cod_produto_etiqueta = @cod_produto_etiqueta;        
        end;

        if(@new_dt_credito is not null and @old_dt_credito is null and @new_cod_cliente_credito is not null and @new_valor_credito > 0)
            begin
                DECLARE @crd as int = 0;
                select @crd = count(*) from cliente_vale where cod_assistencia = @COD_ASSISTENCIA;
                if(@crd <= 0)
                    begin
                        insert into cliente_vale (cod_colaborador, tipo, data, valor, valor_usado, cod_usuario, motivo, cod_assistencia)
                        values (@new_cod_cliente_credito, 1,@new_dt_credito,@new_valor_credito, 0,@new_cod_usuario,'SISTEMA ASSISTENCIA: VALOR REFERENTE A DIFERENÇA DE PEÇA DE SUBSTITUIÇÃO', @COD_ASSISTENCIA);
                    end;
            end;

             if(@new_cod_produto_etiqueta_s is not null and @new_cod_produto_etiqueta_s <> '' and @new_dt_substituicao is not null)
                begin
                    DECLARE @v as int = 0;
                    DECLARE @vn as int = 0;
                    DECLARE @lj as  int = 0;

                    update produto_etiqueta set
                        dt_baixada = @new_dt_substituicao,
                        OBS_BAIXA = concat('BAIXADA PELO SISTEMA DE ASSITENCIA: ', @new_dt_substituicao, ' - ' ,@new_obs_substituicao)
                    where cod_produto_etiqueta = @new_cod_produto_etiqueta_s;
                    
                    select @lj = cod_loja from produto_etiqueta where COD_PRODUTO_ETIQUETA = @new_cod_produto_etiqueta_s;
                    if(@new_cod_loja <> @lj)
                        begin
                           update produto_etiqueta set COD_LOJA_ANTERIOR = @lj, COD_LOJA = @new_cod_loja where cod_produto_etiqueta = @new_cod_produto_etiqueta_s;
                        end;     
                    update  balanco_etiqueta set baixa = 1, hora_baixa = CURRENT_TIMESTAMP, cod_usuario = @new_cod_usuario, obs = 'SISTEMA DE ASSISTENCIA' where cod_produto_etiqueta = @new_cod_produto_etiqueta_s;           

                end;
     
    END

    GO

    domingo, 8 de dezembro de 2013 16:01

Respostas

Todas as Respostas