Оператор триггера SQL Server НЕ перехватывает - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь создать триггер, который при обновлении столбца таблицы SAMPLE использует оператор case для обновления столбца в другой таблице. В настоящее время триггер не перехватывает ни одно из предложений WHEN. Значение в предложении ELSE - это то, что используется для обновления.

CREATE TRIGGER dbo.SAMPVAL
ON dbo.SAMPLE
FOR UPDATE
AS
BEGIN
    UPDATE U
    SET U.VALIDATED = CASE
                         WHEN (U.VALIDATED IS NULL AND LEN(INSERTED.VALUSER) > 0)  
                            THEN 'VAL1'
                         WHEN (LEN(U.VALIDATED) > 0 AND U.VALIDATED = 'VAL1') 
                            THEN 'VAL2'
                         WHEN (LEN(U.VALIDATED) = 0) 
                            THEN 'NEWERVAL'
                         WHEN (LEN(U.VALIDATED) > 0) 
                            THEN 'NEWERVAL1'
                         ELSE '-'
                      END
    FROM INSERTED 
    INNER JOIN SUSERFLDS U ON U.SAMPNO = INSERTED.SAMPNO
END;

Если поле U.VALIDATED пусто и длина столбца SAMPLE.VALUSER больше нуля, то SUSERFLDS.VALIDATED = 'VAL1'. Когда я проверяю это, столбец SUSERFLDS.VALIDATED обновляется до "-".

1 Ответ

0 голосов
/ 30 мая 2019
CREATE TRIGGER dbo.SAMPVAL
ON dbo.SAMPLE
FOR UPDATE
AS BEGIN
  UPDATE U
    SET U.VALIDATED = CASE
    WHEN (U.VALIDATED IS NULL AND LEN(INSERTED.VALUSER) > 0) THEN 'VAL1'
    WHEN (LEN(U.VALIDATED) > 0 AND U.VALIDATED = 'VAL1') THEN 'VAL2'
    WHEN (LEN(U.VALIDATED) = 0) THEN 'NEWERVAL'
    WHEN (LEN(U.VALIDATED) > 0) THEN 'NEWERVAL1'
    ELSE U.VALIDATED
    END
  FROM INSERTED 
  INNER JOIN SUSERFLDS U ON U.SAMPNO =INSERTED.SAMPNO
END;

Изменение ELSE '-' на ELSE U.VALIDATED исправило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...