今天遇到一个问题:
本地库(MSSQL 2016)上有一个表要update,然而更新条件需要在链接服务器上相应库表中关联。语句写完执行时报错:
消息 3989,级别 16,状态 1,行 xxxx
不允许启动新请求,因为该请求应具有有效的事务描述符。
懵逼,第一次见到。去微软官网上搜了一下,果然有:
https://docs.microsoft.com/zh-cn/sql/relational-databases/errors-events/mssqlserver-3989-database-engine-error?view=sql-server-ver15
"
当满足以下条件时,SQL Server 处理分布式查询 (DQ) 的方式存在一些设计限制:
SQL Server 联接一个远程 SQL Server 数据源的多个表。
正在发出查询的会话未在分布式事务中登记。
"
全中。所以解决办法很简单,强制加上分布式事务:
BEGIN DISTRIBUTED TRANSACTION
-- 试图执行的语句
COMMIT TRANSACTION
搞定。