Sql 防止更新的最佳方法
我遇到了这样一种情况,即我们希望防止针对特定场景更新表 因此,对于95%的更新,我希望更新能够正常进行,并更新所需的字段……对于另外5%的更新,我希望防止更新发生。这将基于更新中传递的数据以及表中当前填充的内容 因此,一个很好的例子是用户提交了他们今天的时间。如果他们重新提交时间,我不希望DB允许进行更新,因为该用户的时间表已标记他们已提交时间,并且时间字段不为空 我在玩触发器,它似乎代替触发器将允许我处理这个…基本上只让更新发生,如果该标准成立 有什么想法吗?我很欣赏你的想法 (如果清楚,请告诉我) 编辑:很抱歉……这可能不是一个好例子。我们重用一个更新存储过程来执行许多不同的更新,因此它是相当通用的。我想弄清楚,对于那些我不希望执行更新的情况,最好的方法是什么。使用触发器基本上是一种保护措施,以防止有人意外地覆盖以前输入的数据。谢谢你的意见 **EDIT2:*谢谢大家……仔细考虑后,Martin是对的,我应该将逻辑构建到存储过程中。有人告诉我他们想用触发器来处理这个问题,但你们都是对的……这不是处理这个问题的正确方法。再次感谢你的帮助 谢谢Sql 防止更新的最佳方法,sql,sql-server,tsql,sql-server-2008,Sql,Sql Server,Tsql,Sql Server 2008,我遇到了这样一种情况,即我们希望防止针对特定场景更新表 因此,对于95%的更新,我希望更新能够正常进行,并更新所需的字段……对于另外5%的更新,我希望防止更新发生。这将基于更新中传递的数据以及表中当前填充的内容 因此,一个很好的例子是用户提交了他们今天的时间。如果他们重新提交时间,我不希望DB允许进行更新,因为该用户的时间表已标记他们已提交时间,并且时间字段不为空 我在玩触发器,它似乎代替触发器将允许我处理这个…基本上只让更新发生,如果该标准成立 有什么想法吗?我很欣赏你的想法 (如果清楚,请告
S这不需要触发器。e、 差不多
UPDATE Users
SET timefield = @timefield
WHERE UserId = @UserId AND [Day]=@day AND timefield IS NULL
这对你的例子很有用。然后,您可以检查受影响的行,以查看是否有任何内容被实际更新。因此,如果我错误地键入“16”而不是“8”,我将无法更正我的时间?这种逻辑实际上属于您的应用程序层,而不是数据库。如果您坚持db方法,按照kekekala的建议创建一个sp来封装逻辑,并按照Martin Smith的建议使用一个智能编写的更新语句,这将是一个很好的解决方案。老实说,您的编辑并没有让事情变得更清楚。“重用更新存储过程”是什么意思?您有一个更新不同表的通用过程?对-只需将您的业务规则构建到非数据库抽象层,或者这种SQL语法就可以了,特别是在SP中(业务规则的另一个有用位置);只是不要进入触发器。