2013-11-26 2 views
-1

Я новичок в SQL Trigger и нуждаюсь в некоторой помощи. У меня есть триггер обновления ниже, и он отлично работает - обновление CompletedDate, когда Status = «Completed» или «Created By Error».MS SQL 2008 - Trigger

ALTER TRIGGER [dbo].[trigger_CompletedDate] ON [dbo].[ERP_PurchaseRequest] AFTER UPDATE 
AS 
BEGIN 

SET NOCOUNT ON; 

    IF (UPDATE(PRStatus)) 
    BEGIN 
     UPDATE pr SET CompletedDate = GETDATE() 
      FROM [ERP_PurchaseRequest] pr 
      INNER JOIN INSERTED i ON pr.PRStatus = i.PRStatus 
      WHERE (i.PRStatus = 'Completed' 
        AND pr.PRID = i.PRID) 
       OR 
        (i.PRStatus = 'Created By Error' 
        AND pr.PRID = i.PRID) 
    END 

END 

Теперь мне нужно изменить этот триггер, чтобы выполнить, как это:

1) Если i.PRStatus = 'Completed', а затем UPDATE CompletedDate и выполнить другой запрос UPDATE для другой таблицы WHERE ИУП к ИУП обновляется, как:

UPDATE Table1 SET Column1 = 'Yes" Where PRID = i.PRID (from the inserted table) 

2) ElseIf i.PRStatus = 'Создано Error', а затем просто обновить только CompletedDate.

Если возможно, предоставьте пример кода. Оценил!

Спасибо,

+0

Так что вы попробовали? Что не сработало? Почему это не сработало? – LittleBobbyTables

+0

Я не знаю, как отделить обновление, когда оно присоединено к таблице INSERTED. – milacay

+0

Я разобрался в работе. – milacay

ответ

0

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

IF OBJECT_ID('ERP_PurchaseRequest') IS NULL 
CREATE TABLE ERP_PurchaseRequest (
    PRID INT, 
    PRStatus VARCHAR(255), 
    CompletedDate DATETIME) 
GO 
IF OBJECT_ID('OtherTable') IS NULL 
CREATE TABLE OtherTable (
    PRID INT, 
    Column1 VARCHAR(50)) 
GO 


CREATE TRIGGER [dbo].[trigger_CompletedDate] ON ERP_PurchaseRequest AFTER UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    IF (UPDATE(PRStatus)) 
    BEGIN 
     UPDATE pr SET CompletedDate = GETDATE() 
     FROM ERP_PurchaseRequest pr 
     INNER JOIN inserted i ON pr.PRID = i.PRID 
      AND pr.PRStatus = i.PRStatus 
     WHERE i.PRStatus IN ('Completed', 'Created By Error') 

     UPDATE ot SET Column1 = 'Yes' 
     FROM OtherTable ot 
     INNER JOIN inserted i on i.PRID = ot.PRID 
     WHERE I.PRStatus = 'Completed' 
    END 
END 
+0

Спасибо @David. Это работает! Уточнение: как вы уже говорили в начале, что я новичок в запуске. Обновление/Присоединение к методу таблицы INSERTED я узнал из другого потока. Я действительно пытался застрять, поэтому я пришел сюда за помощью. Я бы не стал публиковать, не пытаясь сначала. Во всяком случае, еще раз спасибо. – milacay

Смежные вопросы