我们的一位应用程序开发人员向我提出了一个有趣的问题。在下面的代码中,您将看到更新语句将当前列值分配给两个变量,同时还将这些相同的列更新为新值。
问题是,是否保证变量@oStart 和@oFinish 将分配给[Start] 和 [Finish] 的旧值而不是新值?在测试中,情况确实如此,但是,我想确认这是有保证的行为。
我希望答案是“不——不能保证”,最终取决于优化器的决定。无论如何,这种模棱两可的代码无论如何都是不鼓励的(有更优雅和可读性更高的编写方式),但有兴趣听听大家的想法。
-- Parameters
DECLARE @StartDate smalldatetime = '2022-01-01',
@EndDate smalldatetime = '2022-12-31';
-- Body
DECLARE @oStart smalldatetime,
@oFinish smalldatetime;
UPDATE [dbo].[MyTable]
SET @oStart = [Start],
@oFinish = [Finish],
[Start] = @StartDate,
[Finish] = @EndDate
WHERE [ID] = 12;