Использование триггера для обновления определенного значения в одной таблице на основе определенного значения другой таблицы - PullRequest
0 голосов
/ 24 сентября 2018

Как видно из заголовка, я пытаюсь обновить специфическую строку и столбец в одной таблице, основываясь на том, что специфичный столбец в другой таблице в другой таблице обновлен до,Я не смог найти ничего о переполнении стека, что-то конкретное для того, что я пытаюсь сделать.Пока что это либо обновление одной таблицы на основе той же таблицы, либо создание обновления на основе того, изменился ли столбец (не ищет конкретное значение).

Тем не менее, я пока собрал следующеекод из моего исследования переполнения стека:

CREATE TRIGGER trUpdateTaskToComplete on [DBName].[dbo].[Projects]
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE [DBName].[dbo].[TaskTracker]
    SET Complete=1
    FROM [DBName].[dbo].[Projects] t
    INNER JOIN inserted i on t.id = i.id
    AND i.Status='Complete'
END

Это делает 90% того, что мне нужно, за исключением того, что он обновляет ВСЕ строки в таблице TaskTracker, связанной с идентификатором проекта.Как я могу заставить его установить только Complete = 1 в строках, где Task (столбец из TaskTracker) имеет значение «ProjectIsComplete»?Я пробовал что-то вроде этого:

    UPDATE [DBName].[dbo].[TaskTracker]
    SET Complete=1
    WHERE Task = "ProjectIsComplete"
    FROM [DBName].[dbo].[Projects] t
    INNER JOIN inserted i on t.id = i.id
    AND i.Status='Complete'

, но кажется, что SQL Server не для этой жизни.Что я могу сделать, чтобы мой триггер работал?Примечание: я только то, что поле, установленное для заполнения для строк, которые имеют значение задачи «ProjectIsComplete» И все еще для связанного идентификатора.Спасибо за любой совет, который может быть предложен!

1 Ответ

0 голосов
/ 24 сентября 2018

Спасибо Шону Ланге за ответ.Правильный код выглядит следующим образом:

CREATE TRIGGER trUpdateTaskToComplete on [DBName].[dbo].[Projects]
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE [DBName].[dbo].[TaskTracker]
    SET Complete=1
    FROM [DBName].[dbo].[Projects] t
    INNER JOIN inserted i on t.id = i.id
    AND i.Status='Complete'
    WHERE Task = 'Complete'
END
...