繁体   English   中英

当TableA中的ColumnA根据两个表中的公共列更新时,编写一个触发器来更新TableB中的columnB

[英]Write a trigger to update the columnB in TableB when the ColumnA in TableA are updated based on the common column in both the tables

CREATE TABLE [dbo].[USERS]
(
    [USER_NAME] [nvarchar](64) NOT NULL,
    [EMAIL_ADDRESS] [nvarchar](256) NULL,
    [REGISTERED_DATE] [datetime] NOT NULL,
    [FULL_NAME] [nvarchar](256) NOT NULL,
    [MANAGER] [nvarchar](64) NULL,
    [DEPARTMENT] [nvarchar](256) NULL,
    [TITLE] [nvarchar](64) NULL,

    PRIMARY KEY CLUSTERED ([USER_NAME] ASC)
                WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                      IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                      ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

这是我的表,我希望在更新管理器列时触发触发器,并且必须根据USER_NAME列在另一个表上更新相同的管理值。

我尝试了下面的触发器,但它不起作用。

Create TRIGGER [dbo].[UpdateManager]
ON  [dbo].[USERS]
AFTER UPDATE
AS 
BEGIN

SET NOCOUNT ON;

declare @USER_NAME as nvarchar   
declare @MANAGER as nvarchar
if(update(MANAGER))
begin
    select @USER_NAME = USER_NAME from deleted
    select @manager = Manager from deleted 
    update [dbo].[USERS_TEST] set MANAGER=@MANAGER where USER_NAME=  @USER_NAME     

end

END

您的触发器中有两个主要问题:

  • 如评论中所述, deleted可以有多行,您没有考虑到这一点。
  • nvarchar没有长度; 在这种情况下,默认长度为 1。

我怀疑您想要的查询是:

update ut
    set MANAGER = d.MANAGER 
    from [dbo].[USERS_TEST] ut join
         deleted d
         on ut.USER_NAME = d.USER_NAME  ;   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM