【问题标题】:Transactions in SQL coming from pymssql rollback on their own来自 pymssql 的 SQL 中的事务自行回滚
【发布时间】:2012-09-05 21:31:33
【问题描述】:

我们有一个开发人员使用使用 freetds 的 pymssql 连接到 SQL Server。他的脚本根据 MySQL 数据库中的值动态生成 sql 插入查询。

当您在 SQL Profiler 中查看这些语句时,它们会被正确解析并在其中包含正确的开始事务/提交。出现“已将数据库上下文更改为...”的唯一“用户错误消息”,每当您在 SQL 中发出 USE 时就会出现。批处理完成后,会出现事务日志事件“回滚”,并且删除所有插入的记录。

我们没有使用 XACT_ABORT_OFF,因为我没有看到“将数据库上下文更改为”受到它的影响。

有人对此有任何想法或经验吗?谢谢!

[编辑]: 从分析器复制的代码在 SSMS 中使用相同的用户运行良好,并且没有触发器。

[第二次编辑]: 在 SQL 探查器中,我在 eventsubtype 下看到一个带有“rollback”的“TransactionLog”条目,但是没有 TM:Rollback Tran

【问题讨论】:

  • 是否检查过表上是否存在导致回滚的触发器?您是否直接从 SSMS 中的分析器运行查询并查看会发生什么?
  • 正确,表上没有触发器,当我将代码粘贴到 SSMS 中时,它也可以使用相同的用户名顺利运行。感谢您的意见!

标签: sql sql-server rollback pymssql


【解决方案1】:

因此,经过多次搜索和三次检查自动提交设置后,我们发现 2 个变量的名称非常接近,并且它提交了错误的变量。有一个 mysql 和一个 pymysql 模块,但在这种情况下,我们使用的是 pymssql,但它是在 pymysql 中输入的。感谢所有评论的人。

【讨论】:

    【解决方案2】:

    可能连接未正确提交或关闭。检查 freetds 文档以确保您使用正确的使用模式。此外,您可能想检查是否可以在连接上启用自动提交模式。

    【讨论】:

    • 自动提交,这就是我想要的。谢谢,我现在就调查一下,让大家知道。如果有人有其他想法,请告诉我。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 2013-05-13
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    相关资源
    最近更新 更多