2011-08-25 24 views
1

有沒有一種方法,使用觸發器或其他方式,以確保在更新行時總是顯式設置特定字段,即使通過SQL Server Management Studio運行臨時SQL?具體來說,我們的表都有change_note字段,我們總是希望爲每次更新設置該字段。我們考慮和丟棄的東西:在UPDATE語句中需要顯式值嗎?

  1. 將change_note設置爲NOT NULL。我們這樣做,但它沒有幫助。一旦change_note具有初始值,您可以根據需要運行儘可能多的UPDATE語句來忘記更新change_note,並且由於之前的值仍位於change_note中,因此NOT NULL仍然很開心。

  2. 使用觸發器將change_note的舊版本與change_note的新值進行比較。有時候你想讓change_note和以前一樣。這並不是說我們希望確保change_note發生變化,我們希望確保在任何更新中明確提供它的值。

  3. 拒絕運行臨時SQL的權限,並強制每個人只通過存儲過程API更新數據,並將change_note作爲更新相關表的所有SP的必需參數。我們有太多的特別查詢需求。

難住!有任何想法嗎?

謝謝!

+0

一個觸發器應該爲此工作。更多細節將幫助我建議觸發器的內容 – JNappi

+0

例如,假設您有一個標準的ADDRESS表,並帶有一個額外的字段change_note。任何時候ADDRESS表中的任何字段都會更新,必須顯式提供change_note **。有時候顯式提供的change_note會碰巧與行中已有的change_note的值相匹配,這意味着您不能簡單地查找新值和新值之間的差異,以確定顯式提供了change_note。 –

回答

0

使用#2並處理更新觸發器中的「有時」部分。

0

要求所有用戶通過將更新的值插入到另一個表(其中change_note不是NULL)執行更改,並使用觸發器將值複製到另一個表中?

0
+0

不知道DB2如何與此相關...... –

+0

該文章中沒有任何內容是DB2特有的,它鏈接到的文章是針對SQL Server的。原則是相似的。 – brandong

+0

好吧,我可能會鏈接到特定於SQL Server的帖子,雖然這兩篇帖子似乎都沒有提出一個易於實現的解決方案,例如檢查列是否在觸發器中更新。你自己的答案看起來像是脫離主題,並且在沒有我們的評論的情況下,對於其他讀者來說可能仍然是偏離主題的。 –

1

觸發器將完成這項工作(確保您編寫它來處理多個記錄插入/更新)。但是,你的第一和第二點似乎與我相互排斥。如果不是不夠好,你怎麼知道哪些需要改變?你有某種商業規則嗎?