我想寫一個存儲過程(SQL服務器2008R2),說我有一個表:如何編寫一個更好的存儲過程?
person Columns: Id int (pk) Date_of_birth date not null Phone int allow null Address int allow null Name nvarchat(50) not null
的樣本數據:在存儲過程 Id=1,Date_of_birth=01/01/1987,phone=88888888,address=null,name='Steve'
Update語句,假設 這些參數已申報: Update person set [email protected],[email protected],[email protected],[email protected] where [email protected]
該表具有記錄任何更改的觸發器。 現在我有一個更新上述人表的一個asp.net更新頁面
問題是,如果用戶只是想更新地址='蘋果街',上述更新語句將更新所有字段,但不檢查if原始值=新值,然後忽略此字段,然後檢查下一個字段。所以我的日誌表會記錄所有的事件,即使列不會被更新。
在這一點上,我的解決方案
- 通過ID選擇所有的值,並將它們存儲到本地變量。 使用if-else檢查並生成更新語句。最後, 動態運行生成的SQL(sp_executesql)
- 按id選擇所有值並將它們存儲到本地變量中。 使用的if-else檢查和seperately更新每個字段:
If @dob <> @ori_dob
Begin
Update person set [email protected] where [email protected]
End
可能這是一個愚蠢的問題,但請諮詢我,如果你有更好的想法,謝謝!
您的日誌表是否使用個人觸發器填充?如果是這樣,您可能需要考慮檢查每個列,而不是在更新過程中。 – pilotcam 2012-07-17 01:54:03
如果用戶只更新其中一列,會出現什麼問題?爲什麼不讓他更新所有內容,如果其中一列正在更新已經具有相同的值;讓它也被更新。 – Icarus 2012-07-17 01:54:09
@pilotcam我明白了。這是我的另一個解決方案,謝謝。 – 2012-07-17 02:20:54