2010-11-20 121 views
0

我曾在上表SQLSERVER觸發器(標籤)觸發更新

Create TRIGGER Trig_TabsUp 
on Tabs 
For UPDATE 
AS 
insert into tabs_Update select * from deleted 

tabs_update一樣的標籤,但在標籤標識字段是不是在tabs_update身份只是詮釋。它給了我這個錯誤

行值updateed或刪除或者不要使行唯一或ALTER多行2列

我試圖把身份農田到餐桌Tabs_Update但仍然是相同的錯誤

回答

0

我猜你在ID字段上有一個主鍵或唯一約束。這是您第二次更新相同記錄時的問題。 Sp_help Tabs_update會告訴你他們是什麼。

你是正確的ID字段只是和int。但是,您應該添加「更新日期時間」字段,並將主鍵組合爲ID和更新日期時間。

另外做select *幾乎總是被認爲是一個壞主意。如果添加新字段並忘記添加更新表,則觸發器將中斷。如果您更改字段的順序,它也會中斷。

+0

如果基表定義發生變化,但審計表沒有在這裏不是壞事,那麼觸發器會中斷。它比基礎和審計表定義不同步的替代方案要好。 – 2010-11-20 20:27:51

+0

@Martin遺憾的是,它可能不會馬上破裂。在一個案例中,我發現在錯誤發生之前基表發生變化需要一段時間。有人假設觸發器沒有立即重新編譯。因此,解決問題需要一段時間。這比一些沒有被審計的數據要糟糕得多。但我可以看到這兩種方式 – 2010-11-20 20:40:57

+0

是否有一個視圖參與?您可能需要運行'sp_refreshview' – 2010-11-20 20:53:49

1

嘗試將SET NOCOUNT ON添加到您的觸發器定義中。

+0

+1。爲什麼哦,爲什麼不是默認的...... – gbn 2010-11-21 08:57:05