我正在使用SQL Server 2008.我想创建一个更新触发器,它将在用户表更新时触发。
触发功能:将user_tbl
已更新的手机号码替换为user_work_tbl
。
CREATE TRIGGER [dbo].[tr_User_Modified]
ON [dbo].[user_tbl]
AFTER UPDATE
AS BEGIN
SET NOCOUNT ON;
DECLARE @MobileNo varchar(11)
IF UPDATE (mobile_no)
BEGIN
DECLARE @MobileNo VARCHAR(50)
SELECT @MobileNo = mobile_no
FROM [dbo].user_tbl
UPDATE [dbo].[user_work_tbl]
SET mobile_no = @MobileNo
WHERE [dbo].[user_work_tbl].mobile_no = @oldMobileNo // here I have a problem
END
END;
在评论"这里我遇到了问题"我需要一个在更新前存在于user_tbl
中的移动电话号码,以便user_work_tbl
的唯一一行得到更新。
也接受任何建议。
感谢您的回复
答案 0 :(得分:3)
您需要在触发器中将三个表连接在一起 - user_work_tbl
,inserted
和deleted
。但是,目前还不清楚究竟需要什么条件:
CREATE TRIGGER [dbo].[tr_User_Modified]
ON [dbo].[user_tbl]
AFTER UPDATE
AS BEGIN
SET NOCOUNT ON;
IF UPDATE (mobile_no)
BEGIN
UPDATE u
SET mobile_no=i.mobile_no
FROM user_work_tbl u
inner join
deleted d
on u.mobile_no = d.mobile_no
inner join
inserted i
on
i.PKCol = d.PKCol --What's the PK of user_tbl?
END
END;
inserted
和deleted
是包含受特定语句影响的新旧行的伪表,并且具有与原始表相同的模式。它们只能在触发器内访问。
另请注意,即使在user_tbl
中更新了多个行,上述触发器也是正确的 - 前提是您可以正确关联inserted
和deleted
在最后的ON
条款中。
答案 1 :(得分:0)
您可以从已删除表中获取旧电话号码,从插入中获取新电话号码,但您应该使用用户主键更新行。