2012-04-10 5 views
0

Ich habe diesen Auslöser, der funktionell funktioniert (soweit ich durch meine Tests sagen kann), aber ich vermute stark, dass ich den Code mit IF UPDATE vereinfachen kann ... Ich verstehe nur nicht ganz, wie es funktioniert. Ich scheine die besten unerledigten Trigger in Bezug auf die eingefügten und gelöschten Tabellen zu tun.Sind diese Joins innerhalb eines AFTER INSERT, UPDATE-Trigger-Äquiv. IF UPDATE verwenden (Spalte ...)?

Kann dieser Trigger in der oben genannten Weise vereinfacht werden (oder auf andere Weise, die die Lesbarkeit verbessert)?

Antwort

3

Wenn aktualisiert (column_name) kann nicht helfen, da es nur angibt, dass Spalte an einer Abfrage teilgenommen hat, die den Trigger ausgelöst. Der Aktualisierungs-Teil des Triggers kann durch Verwendung der case-Anweisung verkürzt werden, um zu entscheiden, welches Datum date_created halten wird.

CREATE TRIGGER [dbo].[tr_Affiliate_IU] 
    ON [dbo].[Affiliate] 
    AFTER INSERT, UPDATE 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Get the current date. 
    DECLARE @getDate DATETIME = GETDATE() 

    -- Set the initial values of date_created and date_modified. 
    UPDATE 
     dbo.Affiliate 
    SET 
     -- If there is a record for this ID in Deleted 
     date_created = case when D.id is not null 
          -- Take date of creation from Deleted 
          then D.date_created 
          else @getDate 
          end 
     ,date_modified = @getDate 
    FROM 
     dbo.Affiliate A 
     INNER JOIN INSERTED I ON A.id = I.id 
     LEFT OUTER JOIN DELETED D ON I.id = D.id 
END 
+0

das ist nur die Art von Hilfe, die ich mir erhofft hatte, danke! –

Verwandte Themen