SQL Server:创建触发器以将另一个表上的旧值替换为新值
我正在使用SQLServer2008。我想为更新创建一个触发器,它将在更新用户表时触发 触发功能:将SQL Server:创建触发器以将另一个表上的旧值替换为新值,sql,sql-server,Sql,Sql Server,我正在使用SQLServer2008。我想为更新创建一个触发器,它将在更新用户表时触发 触发功能:将user\u tbl更新的手机号码替换为user\u work\u 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)
user\u tbl
更新的手机号码替换为user\u work\u 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\u tbl
中存在一个手机号码,以便更新user\u work\u tbl
的唯一一行
我们也接受任何这样做的建议
感谢您的所有回复您需要在触发器中将三个表连接在一起-
用户工作tbl
,插入
和删除
。然而,目前尚不清楚具体需要哪些条件:
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\u tbl
中更新了多行,前提是您可以在最后的ON
子句中正确地关联插入的和删除的。您需要在触发器-user\u tbl
中将三个表连接在一起,插入
和删除
。然而,目前尚不清楚具体需要哪些条件:
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\u tbl
中更新了多行,只要您能够在最后的ON
子句中正确地关联插入的和删除的。您可以从表删除的中获取旧电话号码,从插入的中获取新电话号码,但是您应该使用用户主键来更新行 您可以从删除的表中获取旧电话号码,从插入的表中获取新电话号码,但您应该使用用户主键更新行 为什么要将手机号码存储在多个地方?通过这样做,你为自己引入了更多的工作——比如必须编写这个触发器。为什么你要将手机号码存储在多个地方?这样做,,您正在为自己引入更多工作-例如必须编写此触发器。deleted
和inserted
伪表不在dbo
模式中-不要使用dbo。
前缀deleted
和inserted
伪表不在dbo
模式中-不要使用dbo.
它们的前缀