我想写一个存储过程(SQL server 2008r2),假设我有一个表:
人 列: Id int (pk) Date_of_birth 日期不为空 电话 int 允许 null 地址 int 允许 null 名称 nvarchat(50) 不为空
样本数据:
Id=1,Date_of_birth=01/01/1987,phone=88888888,address=null,name='Steve'
存储过程中的更新语句,假设参数已经声明:
Update person set
Date_of_birth=@dob,phone=@phone,address=@address,name=@name where id=@id
该表有一个触发器来记录任何更改。现在我有一个用于更新上述人员表的 asp.net 更新页面
问题是,如果用户只想更新 address='apple street' ,上面的更新语句将更新所有字段但不检查原始值是否=新值,然后忽略该字段然后检查下一个字段。所以我的日志表将记录所有事件,即使列不会被更新。
在这一点上,我的解决方案
- 通过 id 选择所有值并将它们存储到局部变量中。使用 if-else 检查并生成更新语句。最后动态运行生成的SQL(sp_executesql)
- 通过 id 选择所有值并将它们存储到局部变量中。使用 if-else 分别检查和更新每个字段:
If @dob <> @ori_dob
Begin
Update person set date_of_birth=@dob where id=@id
End
可能这是一个愚蠢的问题,但如果您有更好的想法,请告诉我,谢谢!