gpt4 book ai didi

sql-server - 如果在同一个语句中使用两次,GETUTCDATE() 会返回相同的值吗?

转载 作者:行者123 更新时间:2023-12-02 07:45:46 25 4
gpt4 key购买 nike

我有一个触发器,每当输入值时,它都会自动将给定条目的 CreationDate 和 ModifiedDate 设置为当前 UTC 时间。 (此后,CreationDate 将保持不变,而 ModifiedDate 将在每次更新时通过另一个触发器进行更新)。

我想确保插入且从未更新的项目的 CreationDate 和 ModifiedDate 具有完全相同的值,因此我使用了如下变量:

DECLARE @currentTime DATETIME
SELECT @currentTime = GETUTCDATE()
UPDATE dbo.MyTable SET CreationDate = @currentTime, ModifiedDate = @currentTime
...

以我的命令式编程心态,我假设这可以防止 GETUTCDATE() 被调用两次,并可能产生略有不同的结果。这实际上有必要吗?如果不是,这会更贵、更便宜还是与下面的代码完全相同?

UPDATE dbo.MyTable SET CreationDate = GETUTCDATE(), ModifiedDate = GETUTCDATE()
...

最佳答案

感谢gbn提供的链接,我相信this answers my question :

In common with rand() It is evaluated once per column but once evaluated remains the same for all rows....look at the ComputeScalar operator properties in the actual execution plan you will see that GetDate() is evaluated twice.

我查了一下,在 SQL Server 2008 中似乎仍然以同样的方式发生这种情况:在执行计划中对 GetUtcDate() 进行了两次评估。它不会在每行产生不同的结果,但如果时机恰到好处,它可能会在每列产生不同的结果。

编辑

我实际上可以证明这种行为!试试这个:

select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]

在我的实验中,我最终在第一列中得到 2011-05-17 20:47:34.2472011-05-17 20:47:34.250在最后一列中,显示了第一次和第二次调用 GETUTCDATE() 之间所有 RAND() 计算结果的三毫秒差异。

关于sql-server - 如果在同一个语句中使用两次,GETUTCDATE() 会返回相同的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com