SQL Server 2012:插入和触发器之间的 DATETIME 差异

2024-07-03

我们遇到了一个非常奇怪的问题,当打电话时GETUTCDATE()第二个语句中的返回值比第一个语句稍早。我们的场景如下:

  1. 我们插入一个表来跟踪用户当前状态,该表有一个触发器,可以将用户过去状态的关联历史表插入到DATETIME字段和插入调用GETUTCDATE()

  2. 完成此操作后,我们将拥有另一个带有关联记录的表,我们将其插入到调用中GETUTCDATE()它跟踪哪个部分更新了用户状态。

所以流程是:

  1. 插入UserStatuses
  2. 触发器触发UserStatuses表插入到UserStatusesHistory呼叫GETUTCDATE()
  3. 然后我们插入OwningStatuses叫桌GETUTCDATE()

我们发现,在某些情况下DATETIME on the UserStatusesHistory是在之后DATETIME on the OwningStatuses table.

GETUTCDATE() on the OwningStatuses在之后调用GETUTCDATE()为了UserStatusesHistory table?

在某些情况下触发器是异步运行的吗? (我无法相信这一点,因为它违背了我读过的所有内容,而且我们没有使用任何服务经纪人)。

是否有可能GETUTCDATE()在某些情况下会在过程开始时缓存,并且此缓存值不会带入触发器中?


由于 SQL 的声明性性质,数据库引擎might可以自由地按照它认为合适的任何顺序评估 SQL 语句的各个部分(只要不影响语义)。您的建议是GETUTCDATE()可能会被缓存,这是一种合理的情况。

我知道这不能回答你的问题。但无论 SQL2012 中 GETUTCDATE 的实现如何,它很可能在未来版本中发生变化。因此,请避免依赖它,否则未来的升级可能会变得非常痛苦。以不依赖于任何有关评估顺序的假设的方式实现您的逻辑。

根据您的具体情况,我看到了一些可能的解决方案。

  1. 如果你没有问题OwningStatuses稍微有一点时间later than UserStatusesHistory,那么如果将第三步作为单独的批处理发送到 SQL Server,可能会有所帮助。
  2. 交换步骤2和3;并让触发查询OwningStatuses而不是自己编造日期。
  3. 停止使用触发器;考虑这一点的理由不止一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 2012:插入和触发器之间的 DATETIME 差异 的相关文章

随机推荐

  • Webdeploy 发布配置文件密码保存

    我将发布配置文件以及所有登录信息保存到 xml 中 但是当我将此 XML 导入到另一台计算机并尝试发布时 它会说我的密码不正确 如何才能将密码正确保存到发布配置文件中并与其他计算机兼容 我的猜测是 该程序故意使用当前 PC 的 盐 来混淆密
  • Webdeploy 发布配置文件密码保存

    我将发布配置文件以及所有登录信息保存到 xml 中 但是当我将此 XML 导入到另一台计算机并尝试发布时 它会说我的密码不正确 如何才能将密码正确保存到发布配置文件中并与其他计算机兼容 我的猜测是 该程序故意使用当前 PC 的 盐 来混淆密
  • 如何解决“不是有效的 XPath 表达式”错误

    在Java上的selenium中 我尝试找到一个元素并在网页上选择它 但它不断收到错误 The string id app article div 2 section div 1 div 5 div section 2 div 2 div
  • 如何解决“不是有效的 XPath 表达式”错误

    在Java上的selenium中 我尝试找到一个元素并在网页上选择它 但它不断收到错误 The string id app article div 2 section div 1 div 5 div section 2 div 2 div
  • 如何从 Swift textView 获取文本?

    我正在尝试学习 Swift 在 Java 我的 母语 语言 中 如果我有一个 JTextFielda我想获取它的内容 我只需调用 JTextField textField new JTextField String output textF
  • 如何从 Swift textView 获取文本?

    我正在尝试学习 Swift 在 Java 我的 母语 语言 中 如果我有一个 JTextFielda我想获取它的内容 我只需调用 JTextField textField new JTextField String output textF
  • Laravel:期待响应 250,但收到“”和消息“”

    我继续从 Laravel 收到此错误 但一切看起来都是正确的 Expecting response 250 but got with message 根据我的研究 通过 Sendgrid 或任何提供商 发送电子邮件并且接收服务器以空白代码响
  • Laravel:期待响应 250,但收到“”和消息“”

    我继续从 Laravel 收到此错误 但一切看起来都是正确的 Expecting response 250 but got with message 根据我的研究 通过 Sendgrid 或任何提供商 发送电子邮件并且接收服务器以空白代码响
  • Google Sheets 脚本函数 UrlFetchApp.fetch 不是从 .onEdit(e) 运行,而是从编辑器运行

    我创建了一个谷歌表格 其中包含沙滩排球杯的大量信息 我想在该表格中选中复选框时调用我创建的 API function onEdit e const ui SpreadsheetApp getUi const spreadsheets Spr
  • Google Sheets 脚本函数 UrlFetchApp.fetch 不是从 .onEdit(e) 运行,而是从编辑器运行

    我创建了一个谷歌表格 其中包含沙滩排球杯的大量信息 我想在该表格中选中复选框时调用我创建的 API function onEdit e const ui SpreadsheetApp getUi const spreadsheets Spr
  • Eclipse JDT ASTParser - MethodVisitor 问题

    我正在编写一些代码来解析java源代码 我正在尝试 Eclipse JDT AST 解析器 我的代码如下 解析代码 我正在针对我用 Java 编写的 Mailer 应用程序测试解析器 第二个代码片段 我的解析器正在访问除generateEm
  • Eclipse JDT ASTParser - MethodVisitor 问题

    我正在编写一些代码来解析java源代码 我正在尝试 Eclipse JDT AST 解析器 我的代码如下 解析代码 我正在针对我用 Java 编写的 Mailer 应用程序测试解析器 第二个代码片段 我的解析器正在访问除generateEm
  • oracle sql中的group by表达式的内连接[重复]

    这个问题在这里已经有答案了 我是 sql 新手 感谢任何帮助 我有两张桌子 employees and jobs employees包含一个变量job id 多个员工可以具有相同的 job ID jobs包含变量job id and job
  • oracle sql中的group by表达式的内连接[重复]

    这个问题在这里已经有答案了 我是 sql 新手 感谢任何帮助 我有两张桌子 employees and jobs employees包含一个变量job id 多个员工可以具有相同的 job ID jobs包含变量job id and job
  • JQuery:用另一组元素替换一组元素的优雅方法?

    我有一堆 DOM 像 div div class stuff div div class stuff div div class stuff div div 我想用一套新的东西替换它 div div class stuff div p cl
  • JQuery:用另一组元素替换一组元素的优雅方法?

    我有一堆 DOM 像 div div class stuff div div class stuff div div class stuff div div 我想用一套新的东西替换它 div div class stuff div p cl
  • 是否可以写一个不可变的双向链表?

    我觉得问这个问题有点愚蠢 但我目前正在学习函数式编程并完成了创建单链表的练习 这让我开始思考 是否有可能创建一个不可变的双链表 假设列表 A B 在构造时 A 需要了解 B 但 B 也需要了解 A 我一直在 Scala 中这样做 所以我不确
  • 是否可以写一个不可变的双向链表?

    我觉得问这个问题有点愚蠢 但我目前正在学习函数式编程并完成了创建单链表的练习 这让我开始思考 是否有可能创建一个不可变的双链表 假设列表 A B 在构造时 A 需要了解 B 但 B 也需要了解 A 我一直在 Scala 中这样做 所以我不确
  • SQL Server 2012:插入和触发器之间的 DATETIME 差异

    我们遇到了一个非常奇怪的问题 当打电话时GETUTCDATE 第二个语句中的返回值比第一个语句稍早 我们的场景如下 我们插入一个表来跟踪用户当前状态 该表有一个触发器 可以将用户过去状态的关联历史表插入到DATETIME字段和插入调用GET
  • SQL Server 2012:插入和触发器之间的 DATETIME 差异

    我们遇到了一个非常奇怪的问题 当打电话时GETUTCDATE 第二个语句中的返回值比第一个语句稍早 我们的场景如下 我们插入一个表来跟踪用户当前状态 该表有一个触发器 可以将用户过去状态的关联历史表插入到DATETIME字段和插入调用GET