2014-01-21 117 views
1

如何使用SQL Server 2005中的其他代码替换合并查询,代码为 以获得相同的功能。用一些其他代码代替SQL Server中的合并

alter trigger [Emp_Update_Logging] on [Employee_Test] 
    after update 
    as 


    MERGE INTO dbo.Emp_Log EL 
    USING INSERTED I 
     ON EL.EID = I.Emp_ID 
    WHEN MATCHED THEN 
    UPDATE 
     SET EL.ModifiedDate = getdate() 
    WHEN NOT MATCHED THEN 
     INSERT(EID,ModifiedDate) 
     VALUES(I.Emp_ID,getdate()); 

    go 

回答

2

你基本上需要,打破了MERGE到两个操作 - 一个INSERT对于尚不存在这些行,和UPDATE对于那些已经存在的那些行。

像这样的东西可能会奏效:

ALTER TRIGGER [Emp_Update_Logging] ON [Employee_Test] 
AFTER UPDATE 
AS 
    -- insert those rows from Inserted that don't exist yet 
    INSERT INTO dbo.Emp_Log(EID, ModifiedDate) 
     SELECT I.Emp_ID, GETDATE() 
     FROM Inserted i 
     WHERE NOT EXISTS (SELECT * FROM dbo.Emp_Log WHERE EID = i.Emp_ID) 

    -- update those rows that already exist 
    UPDATE dbo.Emp_Log 
    SET ModifiedDate = GETDATE() 
    FROM Inserted i 
    WHERE EXIST (SELECT * FROM dbo.Emp_Log WHERE EID = i.Emp_ID) 

然而,由于这是一个UPDATE触发器,我认为你将永远不会有不存在尚未行 - 毕竟,这只是触发火灾发生时已更新现有行 .....