SQL更新。在同一语句中使用和更改值。总是一样的行为?

SQL Update. Value is used and changed on the same statement. Always same behaviour?

我在将要投入生产的过程中遇到问题。事情是我要对这个过程的一部分进行更新,f.i,如下:

DECLARE @paramStartDate DATETIME = '2014-12-31 23:00'

UPDATE [table1]
SET    EndDate = Dateadd(hour, 23, StartDate),
       UpdateDate = Getdate(),
       StartDate = @paramStartDate
WHERE  StartDate < @paramStartDate 

此更新语句如我所料工作,但我的问题是:执行此过程的位置是否重要?更新是否总是先分配新的 EndDate 然后再分配 StartDate?没有可能影响它的环境设置、TimeZone 等?

我尝试在不同的服务器上执行它,但是,正如预期的那样,我真的没有那么多要检查它是否总是像我预期的那样工作。

在 SQL 服务器中,正如@a-horse-with-no-name 指出的那样,我很确定任何 "standard" SQL db,表达式 SET子句中的S逻辑上同时执行。 SQL 服务器需要首先读取所有列的值以在 SET 期间使用,然后继续以物理方式更新列。以下 TechNet 文章支持此观点:https://technet.microsoft.com/en-us/library/ms190623(v=sql.105).aspx。 在 "Processing Other Statements" 部分,您可以阅读

The basic steps described for processing a SELECT statement apply to other SQL statements such as INSERT, UPDATE, and DELETE. UPDATE and DELETE statements both have to target the set of rows to be modified or deleted. The process of identifying these rows is the same process used to identify the source rows that contribute to the result set of a SELECT statement. The UPDATE and INSERT statements may both contain embedded SELECT statements that provide the data values to be updated or inserted.