2009-11-02 56 views
2

我有一個表,其中在單記錄更新,觸發在另一個 表增添了歷史紀錄。中的多個記錄更新消防觸發一旦

當我這個表上運行,因爲它是實現只有一個記錄工作,並在觸發聲明只運行一次,無論它是否影響多個記錄觸發不起作用多記錄更新。有沒有辦法做到這一點?

我可以使用下面的檢查:

**if @@rowcount = 1** 

爲了處理單個記錄的方式,現在是處理和else語句以另一種方式來處理它(我不知道) ?

的問題是我怎麼能以原子處理每種情況下,當我有多個記錄,我怎麼能抓住每一個從插入表中的每個記錄?

觸發當前初始化從插入表中的一些變量,更新在同一個表的datetime列,然後嘗試插入使用初始化的變量我前面提到的歷史記錄。所以這些是我想要支持多個記錄的步驟。

任何人可以爲我提供一個簡單的例子或準則?

預先感謝您

回答

1

一個非常簡單的例子,沒有看到您的當前,精確的觸發邏輯:

-- First update the datetime column for each record inserted 
UPDATE t 
SET t.DateField = GETDATE() 
FROM UnderlyingTable t 
    JOIN inserted i ON t.RecordId = t.RecordId 

-- then insert history record for each record inserted 
INSERT HistoryTable (DateCreated, RecordId, SomeOtherField) 
SELECT GETDATE(), i.RecordId, i.SomeOtherField 
FROM inserted i 
+0

男人我發佈自己的答案後看到你的答案。 非常感謝你!你的例子更清潔,更好...我在這裏很急! – DaTroop 2009-11-02 13:32:59

+0

我會接受你的回答,因爲你花了你的時間來發布解決方案! – DaTroop 2009-11-02 13:34:59

+0

不要害怕答覆! – Sam 2009-11-03 00:13:24

0

我找到了解決如何使其考慮到多行。

首先我更改每個表1記錄的日期從插入表,其中的PK比賽

UPDATE Table1 set status_changed_on = (SELECT CASE WHEN Table1.status is null THEN null ELSE @now END) 
FROM INSERTED i 
WHERE Table1.table1_id = i.table1_id 

然後添加一個歷史記錄是這樣的:

INSERT INTO [History] ([table1_id ], [status_changed_on]) 
SELECT table1_id, @now 
FROM INSERTED 

,就是這樣。對於從INSERTED表中獲取的每條更新記錄,我插入一條歷史記錄,其中@now對於所有記錄都是相同的。它只是一個持有日期時間的時間戳變量。上述

的DML不是實際的,因爲我不能在這裏發佈我公司的代碼,但你得到的圖片。

謝謝!!!