在UPDATE中指定int的上限

时间:2016-01-24 16:00:44

标签: sql sql-server entity-framework tsql

给定一个表,例如文章(Id,Body,Revisions),我想增加Revisions属性,并且一旦达到某个限制(这是开发人员提供的常量) ),应该抛出一个错误。这可以通过T-SQL中的单个UPDATE ... SET语句来实现吗?

我做了什么:

问题

  • 找到一种线程安全的方法,这样可以增加修订,直到达到某个上限。

上下文

由于我使用EF,理想的解决方案是抛出错误或指定某种标志。我正在使用的代码(如下所示)被封装到try-catch中:

 context.Database.ExecuteSqlCommand("UPDATE dbo.Articles SET Revisions = Revisions + 1 WHERE Id=@p0;", articleId);

4 个答案:

答案 0 :(得分:2)

使用CHECK约束。没有更新语句可以违反由CHECK约束实现的边界。甚至没有睡眠剥夺的DBA在控制台发布的更新声明。

{{1}}

答案 1 :(得分:2)

您可以使用table_ + ... + scale_x_discrete(limit = levels) 语句中的WHERE子句执行此操作,该子句将进行测试。如果测试失败,则不会进行更新,而UPDATE的通话将返回0而不是1。

如果限制为1000,则更新SQL为:

context.Database.ExecuteSqlCommand

然后你会测试是否count = context.Database.ExecuteSqlCommand( "UPDATE dbo.Articles SET Revisions = Revisions + 1 WHERE Id=@p0 AND Revisions < 1000;", articleId); 并提出错误信息。

答案 2 :(得分:1)

有点受伤但是

UPDATE dbo.Articles 
SET Revisions = Revisions + 1 
WHERE Id=@p0
AND sqrt(Revisions - @MaxRevisions - 2) >= 0;

如果Revisions - @Revisions - 2为负数则会抛出

  

发生了无效的浮点运算。

错误

答案 3 :(得分:0)

如果限制为100,

echo                                   ╔════════════════════════════╗
echo                                   ║Bill register/database Menu ║
echo                                   ╠════════════════════════════╣
echo                                   ║   1. -Register a bill      ║
echo                                   ║   2. -Check Bill Info      ║
echo                                   ║   3. Set payment           ║
echo                                   ╚════════════════════════════╝