SQL Server 2019 Express:从/写入SQL Server数据库(无服务器)-在SSMS中工作,但在I



我一直在与SQL Server Express数据库上的触发器作斗争,该触发器验证传入记录,然后将其写入我的Azure SQL数据库(无服务器)。

最初我运行了"触发器t-sql"代码作为SSMS(19.0预览2)中的标准查询;它工作了,并将50k的记录传输到Azure SQL数据库。

然后我更新了这个T-SQL代码来引用[插入的]表,并手动插入一行-无论我在使用/不使用游标,变量,BEGIN DISTRIBUTED TRANSACTION,不同的用户等方面做了什么,触发器都无法插入,而相同的进程作为SSMS的查询运行。

然后我将INSERT触发器简化为一个简单的:
CREATE TRIGGER [dbo].[tc_table_ITrig]
ON [dbo].[tc_table]
AFTER INSERT
AS
BEGIN
INSERT INTO [SQL_Database].[DatabaseName].[schema].[Table]([Var1], [Var2], [Var3], [Var4])
SELECT 1, 2, 3, 4
END;
GO

如果我在SSMS中运行语句,它会成功

如果我插入到[dbo].[tc_table](启动触发器),插入失败,并显示以下消息:

OLE DB provider "MSOLEDBSQL"查询链接服务器SQL_Database"返回消息"参数不正确。"

Msg 7399, Level 16, State 1, Procedure tc_positions_ITrig, Line 13 [Batch Start Line 0]
OLEDB provider "MSOLEDBSQL"查询链接服务器SQL_Database"报告错误。提供程序报告一个或多个参数无效。

Msg 7391, Level 16, State 2, Procedure tc_table_ITrig, Line 13 [Batch Start Line 0]
操作无法执行,因为OLEDB provider "MSOLEDBSQL"查询链接服务器SQL_Database"无法开始分布式事务。

我真诚地希望有人能给我这个指导;我一直在挣扎了一个月。

SQL Server (Express)中的分布式事务依赖于MSDTC,而对于Azure SQL Database这样的云服务来说,这是不存在的。在同一个事务中,不能在本地数据库和云数据库中同时包含插入操作。也许您更适合构建基于变更跟踪的解决方案?

要运行分布式事务,您需要在两台机器上进行设置。

在SQL server上配置MSDTC

相关内容

最新更新