SQL Server:创建触发器以将另一个表上的旧值替换为新值

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)

我正在使用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) 
    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.
它们的前缀