白杨商业智能工作室
#技术分享#SQL Server

Go 连 SQL Server 终于不坑了:go-mssqldb v1.10.0 修复事务静默提交Bug

· 白杨BI工作室

Go 语言连 SQL Server 的同学注意了,微软官方驱动 go-mssqldb 刚发布了 v1.10.0,这次更新干货不少,尤其是修了一个可能导致数据一致性问题的严重 Bug。 如果你用过 `SET XACT_ABORT ON`,这条一定要看。

Go 连 SQL Server 终于不坑了:go-mssqldb v1.10.0 修复事务静默提交Bug

Go 语言连 SQL Server 的同学注意了,微软官方驱动 go-mssqldb 刚发布了 v1.10.0,这次更新干货不少,尤其是修了一个可能导致数据一致性问题的严重 Bug。

最重要的修复:XACT_ABORT 静默提交

如果你用过 SET XACT_ABORT ON,这条一定要看。

此前当 SQL Server 因 XACT_ABORT 中止事务后,驱动程序并不会感知到这个状态——连接还在,后续的 SQL 语句居然还能自动提交!这意味着你以为在事务保护下的操作,其实已经在事务边界之外悄悄执行了。

v1.10.0 终于修复了这个问题(#370)。现在驱动会正确检测服务器端中止的事务,尝试在已中止连接上执行操作时会明确返回错误,不再让你在不知不觉中踩坑。

国内很多金融、电商场景都在用 Go + SQL Server 的组合做核心业务,数据一致性至关重要,这个 Bug 修复建议尽快升级。

实现 DriverContext 接口

这是 Go 数据库驱动的一个标准接口,之前 go-mssqldb 一直没实现,导致一些现代用法用不了:

  • sql.OpenDB() 方式创建连接
  • SetConnMaxLifetime()、SetMaxOpenConns() 等连接池配置

现在都支持了(#365),写法更规范,和 Go 社区的其他数据库驱动行为一致。

Rows.Close() 不再吞错误

以前 Rows.Close() 在清理 token 阶段遇到的服务器错误会被静默忽略(#361)。比如你在遍历结果集时遇到权限问题或约束冲突,Close 之后根本不知道出了错。现在这些错误会正确抛出,排查问题方便多了。

新增 Nullable 日期时间类型

Go 操作 SQL Server 的 datetime/smalldatetime 类型一直有点别扭,特别是处理 NULL 值的时候。v1.10.0 新增了三个类型(#325):

  • civil.NullDate — 可空日期
  • civil.NullTime — 可空时间
  • civil.NullDateTime — 可空日期时间

和 database/sql 的 Scanner/Valuer 接口完美集成,不用再写 *time.Time 那套 workaround 了。

其他值得关注的改动

  • ARM64 Windows 上的命名管道协议支持(#232)— 国内用 ARM 服务器跑 Windows 的场景不多,但在 Azure 上有用
  • 连接字符串错误信息不再泄露用户密码(#319)— 安全修复
  • FailoverPartnerSPN 连接参数(#327)— Always On 高可用场景支持
  • sql_variant scanType 返回修复(#362)— 之前扫描 variant 类型会返回 nil
  • DevContainer 开发环境(#317)— 打开仓库即开箱即用,方便贡献代码

升级方式

go get github.com/microsoft/go-mssqldb@v1.10.0

要求 Go 1.21+,支持 SQL Server 2012 ~ 2022 以及 Azure SQL Database。


📎 原文链接:https://techcommunity.microsoft.com/t5/sql-server-blog/go-mssqldb-v1-10-0-better-reliability-developer-experience-and/ba-p/4516487 📅 发布日期:2026-05-01

相关文章

微软重磅调整:Azure SQL弃用SGX加密意味着什么

微软重磅调整:Azure SQL弃用SGX加密意味着什么

微软 Azure SQL 数据库近日宣布,将正式停用基于英特尔 SGX 安全区域的 Always Encrypted 加密方案,这一变化标志着云端机密计算在数据库加密领域的一次重要技术路线调整。

#技术分享#Azure SQL
Azure SQL数据库中心性能监控来了,你的数据库终于有救了

Azure SQL数据库中心性能监控来了,你的数据库终于有救了

微软近日宣布,Azure SQL 数据库中心(Database Hub)的性能监控功能正式进入公共预览阶段,用户现可在统一门户中直接查看数据库运行指标,无需在多套工具间来回切换。

#技术分享#Azure SQL
微软Fabric数据库中心公共预览开放,数据开发迎来巨变

微软Fabric数据库中心公共预览开放,数据开发迎来巨变

数据库管理正在从被动运维走向主动洞察。微软近日宣布,Fabric 中的数据库中心(Database Hub)正式进入公共预览阶段,这项新能力将数据库运行信号转化为可执行的引导式操作,让数据资产的管理者第一次拥有了驾驶舱式的全局视野。

#技术分享#Azure SQL
SQL Server Always On终于支持多数据库MI链接了

SQL Server Always On终于支持多数据库MI链接了

微软近日宣布,Azure SQL 托管实例(MI Link)现已支持在 SQL Server 的 Always On 可用性组中同时连接多个数据库,该功能目前处于预览阶段。这意味着企业可以在混合云架构下,更灵活地实现多数据库的云端灾备与只读分流。

#技术分享#Azure SQL
Azure SQL数据库无服务器也能自动暂停?省钱大招来了

Azure SQL数据库无服务器也能自动暂停?省钱大招来了

微软近日宣布,Azure SQL 数据库的超大规模无服务器版本正式进入自动暂停与自动恢复功能的公开预览阶段。这意味着企业可以在业务低谷期让数据库自动休眠,在请求到来时秒级唤醒,从根本上重构云数据库的成本模型。

#技术分享#Azure SQL
SQL数据同步退役倒计时,你的数据库迁移方案准备好了吗

SQL数据同步退役倒计时,你的数据库迁移方案准备好了吗

微软近日宣布,Azure SQL 数据同步服务(SQL Data Sync)正式进入退役的最后阶段,该服务将不再支持新的同步组创建,现有用户需尽快迁移至替代方案。 - 停止新建同步组:用户已无法通过门户或 API 创建新的数据同步组,现有同步组仍可运行,但不再获得功能更新。

#技术分享#Azure SQL
有问题?加企业微信 1 对 1 交流 👇
➕ 添加企业微信
备注「白杨」优先通过 · 数据洞察与智能决策
企业微信
企业微信
备注「白杨」优先通过