gpt4 book ai didi

sql-server - SQL Server 默认值是在插入之前还是之后生成的?

转载 作者:行者123 更新时间:2023-12-03 16:13:49 24 4
gpt4 key购买 nike

我有一个看起来像这样的表

CREATE TABLE bob
(ID INT IDENTITY,
blah VARBINARY(MAX),
ts DATETIME2 DEFAULT GETUTCDATE())

让我们假设这个声明

INSERT INTO dbo.bob
( blah )
VALUES (
@blarg
)

需要 10 秒才能完成。

如果开始插入的时间为t。 ts 在新创建的行上会有 t 或 t + 10 秒吗?换句话说,默认值是在插入开始时还是在插入结束时(或其他一些规则)生成的?

最佳答案

GETUTCDATE 是一个 runtime constant

它将在开始时计算一次,并始终对语句插入的所有行使用相同的值。

但是,如果您将其包装在调用 GETUTCDATE 的标量 UDF 中并更改默认值以调用 UDF,您可能会看到不同的值,因为它会逐行计算。

对于单行语句,我想这取决于 10 秒延迟的位置。如果它不能在 10 秒内编译计划,那么直到那时它才会开始执行,所以这就是时间。如果它开始执行并等待锁定,我想它应该在等待之前分配一个时间,因为运行时常量应该已经被解析。

关于sql-server - SQL Server 默认值是在插入之前还是之后生成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36608453/

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