创建SQLserver触发器

DQH612 2011-09-09 10:33:16
我有两张表 一张是SectionTransfer 另一张是PersonnelRec 当第一张表中的 NewDep 和NewPost 发生改变时,第二张表中的DeptID和PostID也相对应的更新 这些字段都是int类型的 这个触发器应该怎么写
...全文
135 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
DQH612 2011-09-13
  • 打赏
  • 举报
回复
--小F-- 2011-09-09
  • 打赏
  • 举报
回复
ALTER trigger [dbo].[tr_personnelrec_update]
on [dbo].[SectionTransfer]
for update
as
begin
declare @DeptId int,@PostID int,@PRID int
if update(NewDep) and update(postdep)
update p set DeptId=@DeptId,postID=@PostID from inserted i ,personnelrec p where PRID=@PRID and 关联条件
end
dawugui 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dqh612 的回复:]
好像运行还是没有效果
[/Quote]没效果的话,自己照着我的思路改.谁知道你的表怎么关联?
DQH612 2011-09-09
  • 打赏
  • 举报
回复
好像运行还是没有效果
bitls 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dawugui 的回复:]

自己截取下.
SQL code
create trigger my_trig on SectionTransfer for update
as
begin
begin
declare @NewDep as int
declare @NewPost as int
select @NewDep = NewDep ,@NewPost = NewP……
[/Quote]
dawugui 2011-09-09
  • 打赏
  • 举报
回复
自己截取下.
create trigger my_trig on SectionTransfer for update
as
begin
begin
declare @NewDep as int
declare @NewPost as int
select @NewDep = NewDep ,@NewPost = NewPost from deleted
if exists(select 1 from inserted where NewDep <> @NewDep or NewPost <> @NewPost)
update PersonnelRec set DeptID = i.NewDep ,PostID = i.NewPost from PersonnelRec p, inserted i where p.DeptID = @NewDep and p.PostID = @NewPost
end
end


geniuswjt 2011-09-09
  • 打赏
  • 举报
回复
自己先了解下update触发器的原理!
deleted,inserted了解下[Quote=引用 5 楼 dqh612 的回复:]
引用 4 楼 dawugui 的回复:
引用楼主 dqh612 的回复:
我有两张表 一张是SectionTransfer 另一张是PersonnelRec 当第一张表中的 NewDep 和NewPost 发生改变时,第二张表中的DeptID和PostID也相对应的更新 这些字段都是int类型的 这个触发器应该怎么写


SQL code

create trigger my_tri……
[/Quote]
DQH612 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dawugui 的回复:]
引用楼主 dqh612 的回复:
我有两张表 一张是SectionTransfer 另一张是PersonnelRec 当第一张表中的 NewDep 和NewPost 发生改变时,第二张表中的DeptID和PostID也相对应的更新 这些字段都是int类型的 这个触发器应该怎么写


SQL code

create trigger my_trig on SectionTransfer ……
[/Quote]

有这么复杂吗 我只要更新 怎么删除和增加都来了
dawugui 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 dqh612 的回复:]
我有两张表 一张是SectionTransfer 另一张是PersonnelRec 当第一张表中的 NewDep 和NewPost 发生改变时,第二张表中的DeptID和PostID也相对应的更新 这些字段都是int类型的 这个触发器应该怎么写
[/Quote]
create trigger my_trig on SectionTransfer for insert , delete , update
as
begin
if not exists(select 1 from inserted)
delete PersonnelRec from PersonnelRec p , deleted d where p.DeptID = d.NewDep and p.PostID = d.NewPost
else if not exists(select 1 from deleted)
insert into PersonnelRec select ....这里自己补上
else
begin
declare @NewDep as int
declare @NewPost as int
select @NewDep = NewDep ,@NewPost = NewPost from deleted
if exists(select 1 from inserted where NewDep <> @NewDep or NewPost <> @NewPost)
update PersonnelRec set DeptID = i.NewDep ,PostID = i.NewPost from PersonnelRec p, inserted i where p.DeptID = @NewDep and p.PostID = @NewPost
end
end
DQH612 2011-09-09
  • 打赏
  • 举报
回复
ALTER trigger [dbo].[tr_personnelrec_update]
on [dbo].[SectionTransfer]
for update
as
begin
declare @DeptId int,@PostID int,@PRID int
update personnelrec set DeptId=@DeptId,postID=@PostID where PRID=@PRID
end

我这样写行不?
DQH612 2011-09-09
  • 打赏
  • 举报
回复
第一张表是调动表 第二张是人事表 当我在第一张表中把张三掉另外一个部门 职位也换了 那第二张表要对应的发生改变
NBDBA 2011-09-09
  • 打赏
  • 举报
回复
说清楚两表如何对应
cutebear2008 2011-09-09
  • 打赏
  • 举报
回复
inserted represents the uodated rows, so you should use set DeptId=inserted.DeptId ...
[Quote=引用 3 楼 dqh612 的回复:]
ALTER trigger [dbo].[tr_personnelrec_update]
on [dbo].[SectionTransfer]
for update
as
begin
declare @DeptId int,@PostID int,@PRID int
update personnelrec set DeptId=@DeptId,postID=@PostID where ……
[/Quote]

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧