Usuário com melhor resposta
TRIGGER SQL SERVER

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
Respostas
-
Deleted
- Marcado como Resposta Moisés Mezêncio domingo, 8 de dezembro de 2013 19:22
Todas as Respostas
-
Deleted
- Marcado como Resposta Moisés Mezêncio domingo, 8 de dezembro de 2013 19:22
-
-