Напишите триггер для обновления столбца B в таблице B, когда столбец A в таблице A обновляется на основе общего столбца в обеих таблицах. - PullRequest
0 голосов
/ 10 апреля 2020
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

1 Ответ

0 голосов
/ 10 апреля 2020

В вашем триггере есть две ОСНОВНЫЕ проблемы:

  • Как упоминалось в комментарии, deleted может иметь несколько строк, и вы не учитываете это.
  • nvarchar не имеет длины; по умолчанию в этом случае используется длина 1.

Я подозреваю, что вы хотите запрос:

update ut
    set MANAGER = d.MANAGER 
    from [dbo].[USERS_TEST] ut join
         deleted d
         on ut.USER_NAME = d.USER_NAME  ;   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...