我想写一个存储过程(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