2010-11-28 449 views
1

在SQL Server 2008中,我有一個場景,其中插入/更新時有一個包含複雜驗證的表。這包括需要臨時將XML輸入轉換爲表格,以便根據永久表格驗證其數據。SQL Server中「AFTER INSERT,UPDATE」觸發器的行爲

但是,我也有我經常更新不需要驗證的簡單整數列的場景。根據我讀到的here,當我執行更新時,似乎SQL Server將返回臨時內存中「插入」表中的整個行,而不僅僅是受影響的列。如果是這樣,那麼它就意味着每執行一次簡單的整數更新,複雜的XML驗證就會毫無用處地完成。

我是否正確理解這一點,如果是的話,我該如何解決這個需要通過存儲過程插入/更新的問題?

回答

3

是的,首先,觸發器將觸發每一個插入或更新操作 - 您不能限制只在特定列受到影響時觸發。您可以檢查觸發器內部,看看某些列是否受到影響,並基於此決定 - 但您無法阻止觸發器首先觸發。

第二,是的,當觸發器觸發時,您將在INSERTED和/或DELETED僞表中擁有底層表的所有列。

您可能想要更改此方法的一種方法是將大型XML列移動到單獨的表中,並將該大型XML驗證觸發器僅放在該表上。在這種情況下,如果只更新或插入到基表中,您將獲得更少的數據,更少的驗證邏輯。只有當你插入或更新到XML表格時,你纔會得到整個驗證。

+2

我剛剛意識到爲什麼我從來沒有使用觸發器和總是使用存儲過程插入/更新/刪除。說「如果@xml不爲空begin(validate)(update)end」更容易。 – IamIC 2010-11-28 07:50:40

相關問題