防止更新的最佳方法

时间:2010-08-03 23:20:08

标签: sql sql-server tsql sql-server-2008

我有一种情况,我们想要阻止更新特定场景的表。

因此,对于95%的更新,我希望更新正常流过并更新所需的字段....对于其他5%,我想阻止更新发生。这将基于更新中传递的数据以及表中当前填充的内容。

一个很好的例子就是用户提交了今天的时间。如果他们重新提交他们的时间我不希望数据库允许更新发生,因为该用户的时间表标记他们已经提交了他们的时间并且时间字段是非NULL。

我正在使用触发器,看起来INSTEAD OF触发器可以让我处理这个...基本上只有在标准成立时才进行更新。

有什么想法?我很欣赏任何想法。

(如果清楚的话,请告诉我)

编辑:我道歉......这可能不是一个好例子。我们重用更新sproc来执行许多不同的更新,因此它非常通用。我想弄清楚在我不希望执行更新的情况下最好的方法是什么。使用触发器基本上是一种安全措施,可以防止有人意外覆盖以前输入的数据。感谢您的输入

** EDIT2:**感谢所有...在思考之后马丁是对的我应该将逻辑构建到sproc中。我被告知他们想用触发器来处理这个问题,但你们都是正确的......这不是处理这个问题的正确方法。再次感谢您的帮助。

谢谢,

取值

1 个答案:

答案 0 :(得分:2)

您不需要触发器。例如

之类的东西
UPDATE Users 
 SET timefield = @timefield
WHERE UserId = @UserId AND [Day]=@day AND timefield IS NULL

适合你的榜样。然后,您可以检查受影响的行,以查看是否实际更新了任何内容。