SQL进程中的Update语句

SQL进程中的Update语句,sql,sql-update,Sql,Sql Update,我只是想知道update语句是如何工作的?比如,SQL在update语句中做什么?我目前正在理解以下脚本 UPDATE Employees SET EmployeeLeaves -= 1, IsOnLeave = CASE WHEN (EmployeeLeaves > 0) THEN 1 ELSE 0 END WHERE EmployeeNo = 2000; 在IsOnLeave语句中,这是否意味着如果EmployeeLeaves大于1,则IsOnleave将更新为1?

我只是想知道update语句是如何工作的?比如,SQL在update语句中做什么?我目前正在理解以下脚本

UPDATE Employees
SET
   EmployeeLeaves -= 1,
   IsOnLeave = CASE WHEN (EmployeeLeaves > 0) THEN 1 ELSE 0 END
WHERE
   EmployeeNo = 2000;

IsOnLeave
语句中,这是否意味着如果
EmployeeLeaves
大于1,则
IsOnleave
将更新为1?

简短回答是它将得到1或0,但大多数sql实现会在设置新值之前使用更新之前的EmployeeLeaves值。这似乎是合理的,因为操作是在atomic中进行的。

简短的回答是它将得到1或0,但大多数sql实现将在设置新值之前的更新之前使用EmployeeLeaves的值。这似乎是合理的,因为原子中的操作差不多,但不完全正确。无论发生什么情况,IsOnLeave列都将更新;如果EmployeeLeave>0,则为1,否则为0。但是,是的,考虑的是原始记录(更新前)的
EmployeeLeaves
的值。

几乎,但不完全正确。无论发生什么情况,IsOnLeave列都将更新;如果EmployeeLeave>0,则为1,否则为0。但是,是的,考虑的是原始记录(更新前)的
EmployeeLeaves
值。

是的,SQL更新中分配右侧的所有内容都是指更新前记录的值。

是,SQL更新中赋值右侧的所有内容都是指更新前记录的值。

为什么说“most”?这是SQL标准的一部分,对吗?我想是的。我不知道为什么certain@Thilo:SQL标准所说的是一回事,但众所周知,SQL实现在许多方面与标准不同,因此倾向于将“大多数SQL实现”附加到有关SQL语法和语义的任何建议上。@Marcelo:我可以从大多数功能中看出这一点。但在这种情况下,确切的行为必须是一成不变的。@Thilo:我不同意使用限定词,只是解释一下而已。我回应你是因为你的评论暗示,使用SQL标准就足以假设某个特性在任何实现中都能工作,而事实并非如此。你为什么说“大多数”?这是SQL标准的一部分,对吗?我想是的。我不知道为什么certain@Thilo:SQL标准所说的是一回事,但众所周知,SQL实现在许多方面与标准不同,因此倾向于将“大多数SQL实现”附加到有关SQL语法和语义的任何建议上。@Marcelo:我可以从大多数功能中看出这一点。但在这种情况下,确切的行为必须是一成不变的。@Thilo:我不同意使用限定词,只是解释一下而已。我回应是因为你的评论暗示,使用SQL标准就足以假设某个特性可以在任何实现中工作,而事实并非如此。