【问题标题】:MS SQL 2008 - TriggerMS SQL 2008 - 触发器
【发布时间】:2013-12-11 23:54:59
【问题描述】:

我是 SQL 触发器的新手,需要一些帮助。我有下面的更新触发器,它工作正常 - 当 Status = 'Completed' 或 'Created By Error' 时更新 CompletedDate。

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 PRID 到 PRID 更新,如:

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

2) ElseIf i.PRStatus = 'Created By Error',则仅更新 CompletedDate。

如果可能,请提供示例代码。赞赏!

谢谢,

【问题讨论】:

  • 那么你尝试了什么?什么没用?为什么它不起作用?
  • 不知道更新加入INSERTED表时如何分离。
  • 我想出了解决办法。

标签: sql-server-2008 tsql triggers


【解决方案1】:

您的问题并没有很清楚地说明您究竟想在这里实现什么,而且您也没有展示任何您试图让它发挥作用的东西。我将尽我最大的努力试图弄清楚你在这里要做什么,但我没有所有的信息。无论如何,给你。让我们知道它是否有效。

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

【讨论】:

  • 谢谢@David。这样可行!澄清:正如你在开始时提到的,我是新手。我从另一个线程中学到的使用 INSERTED 表的更新/加入技术。我确实尝试过但实际上卡住了,这就是我来这里寻求帮助的原因。我不会不先尝试就发布。无论如何,再次感谢。
猜你喜欢
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多