Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mikeunb

Criando uma trigger

Recommended Posts

Galera sou novato, e tenho aprendido muito com o forum.

 

Tenho aqui 2 tabelas, a pai tem um campo que é usado na filho.

Por exemplo tabela pai tem o campo P que é "XXX"

A tabela filho tem o campo F que é "2011abc", ou seja, é composto do campo P da tabela 1 e + o código "abc", que é outro campo da tabela filho.

Ou seja, a PK da tabela pai é FK na tabela filho.

 

Preciso criar uma trigger para que quando houver update na tabela pai, nessa campo P, o campo F da tabela filho seja atualizado automaticamente.

Não sei como colocar na trigger isso.

Espero ter sido claro, agradeco a ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

de acordo com o site da devmedia:

 

create trigger TR_TABELA_PAI ON TABELA_PAI
FOR UPDATE
AS 
select * from deleted  -- dado antes da alteracao
select * from inserted -- dado depois da alteracao

go

 

 

De uma olhada e faca um teste.... em uma base de teste.

 

 

 

 

um teste rapido em uma base de teste que tenho na minha maquina:

 

use base
go

create table _junior (id int identity(1,1), dados varchar(200)) -- pode ser a tabela pai
create table _juniorbkp (id int identity(1,1), dados varchar(200)) -- pode ser a tabela filho

create  trigger TR_junior ON _junior
FOR UPDATE
AS 
-- select * from deleted  -- dado antes da alteracao
-- select * from inserted -- dado depois da alteracao
update _juniorbkp set _juniorbkp.dados = i.dados  -- pode ser update em qualquer campo!
from inserted i inner join _juniorbkp jrbkp on i.id = jrbkp.id


go

insert into _junior select 'jr'
insert into _junior select 'jr1'
insert into _junior select 'jr2'

insert into _juniorbkp select 'jr'
insert into _juniorbkp select 'jr1'
insert into _juniorbkp select 'jr2'


-- antes do update
select * from _junior where id = 1
select * from _juniorbkp where id = 1


update _junior set dados = 'junior' where id = 1 

-- depois do update
select * from _junior where id = 1
select * from _juniorbkp where id = 1

 

Note que no trigger tem a tabela inserted

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

use base
go

create table _junior (id int identity(1,1), dados varchar(200)) -- pode ser a tabela pai
create table _juniorbkp (id int identity(1,1), dados varchar(200)) -- pode ser a tabela filho

create  trigger TR_junior ON _junior
FOR UPDATE
AS 
-- select * from deleted  -- dado antes da alteracao
-- select * from inserted -- dado depois da alteracao
update _juniorbkp set _juniorbkp.dados = i.dados  -- pode ser update em qualquer campo!
from inserted i inner join _juniorbkp jrbkp on i.id = jrbkp.id


go

insert into _junior select 'jr'
insert into _junior select 'jr1'
insert into _junior select 'jr2'

insert into _juniorbkp select 'jr'
insert into _juniorbkp select 'jr1'
insert into _juniorbkp select 'jr2'


-- antes do update
select * from _junior where id = 1
select * from _juniorbkp where id = 1


update _junior set dados = 'junior' where id = 1 

-- depois do update
select * from _junior where id = 1
select * from _juniorbkp where id = 1

Não sendo chato mais poderia comentar cada linha deste código sobre o que ele faz... O comentário só seria no Creater Trigger e ultimo update.

 

 

Note que no trigger tem a tabela inserted

Poderia me dizer a definição deste Inserted e Deleted.

 

Estarei grato por qualquer resposta, e desculpe por fazer muita pergunta básica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia me dizer a definição deste Inserted e Deleted.

aqui esta a definição sobre estas tabelas

http://forum.imasters.com.br/topic/270685-inserted-e-deleted/page__view__findpost__p__970553

 

segue alguns links para você estudar e entender o funcionamento de triggers:

http://www.devmedia.com.br/articles/viewcomp.asp?comp=1695

http://imasters.com.br/artigo/8283/sql-server/triggers-em-transact-sql

http://imasters.com.br/artigo/228

http://imasters.com.br/artigo/3884

http://www.oficinadanet.com.br/artigo/729/usando_triggers

http://imasters.com.br/artigo/3949/sql-server/triggers-instead-of

https://sites.google.com/site/tecguia/trigger-sql-server---efetuando-log

 

OBS.: assim como cursores (entre outros), por problemas de performance, trigger's não são muito recomendadas, mas tem casos que não temos como não usar, avalie antes se o que esta fazendo tem mesmo necessidade de ser implementado com trigger

 

boa sorte e bons estudos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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