有没有办法,使用触发器或其他方法,确保在更新行时始终显式设置特定字段,即使通过SQL Server Management Studio运行即席SQL?具体来说,我们的表都有change_note字段,我们总是希望为每次更新设置该字段。我们考虑过并放弃的事情:
将change_note设置为NOT NULL。我们这样做,但没有帮助。一旦change_note有一个初始值,你就可以运行任意数量的UPDATE语句,忘记更新change_note,并且NOT NULL仍然很高兴,因为之前的值仍然位于change_note中。
使用触发器将旧版本的change_note与change_note的新值进行比较。有时您希望change_note与以前一样。我们并不想确保change_note发生变化,我们希望确保在任何更新中明确提供它的值。
拒绝运行临时SQL的权限,并强制每个人只通过我们的存储过程API更新数据,并使change_note成为更新相关表的所有SP的必需参数。我们有太多的临时查询需求。
难倒!有什么想法吗?
谢谢!
答案 0 :(得分:4)
您可以在触发器主体中使用Update()函数。它将检查触发触发器的语句是否试图更改列上的值:
if Update(column)
--do whay you want;BEGIN....END;
您可以在以下网址找到有关它的更多信息:
http://msdn.microsoft.com/en-us/library/ms187326.aspx
http://msdn.microsoft.com/en-us/library/aa258254(v=sql.80).aspx
答案 1 :(得分:1)
触发器可以完成这项工作(确保你编写它来处理多个记录插入/更新)。但是,你的第一点和第二点似乎与我相互排斥。如果not null不够好,你怎么知道哪些需要改变?你有某种商业规则吗?
答案 2 :(得分:0)
使用#2并处理更新触发器中的“有时”部分。
答案 3 :(得分:0)
要求所有用户通过将更新的值插入另一个表(其中change_note为NOT NULL)来执行更改,并使用触发器复制值?
答案 4 :(得分:0)