从不同的服务器获取 CLR Procedure 中的数据

Getting data inside CLR Procedure from different server

我有一个 CLR 过程,它打开到服务器的连接,比方说 SERVER2,并获取一些数据,处理它并 returns table。

[SqlFunction(
   DataAccess = DataAccessKind.Read,
   FillRowMethodName = "List_FillRow",
   TableDefinition = "Date datetime, Quantity int")]
public static IEnumerable ListCount(...)
{
  using (SqlConnection con = new SqlConnection(connectionStringToSERVER2))
  { ... }
  return list;
}

此 CLR 过程 运行 来自 SERVER1 上 运行 的 SQL 存储过程。

CREATE PROCEDURE [dbo].[sp_Reports_NumaraSpalariJetWash]
BEGIN
    DECLARE curs CURSOR
    LOCAL STATIC READ_ONLY FORWARD_ONLY
    FOR   

    SELECT ...

    OPEN curs  

    FETCH NEXT FROM curs   
    INTO ...;

    WHILE @@FETCH_STATUS = 0  
    BEGIN

        INSERT INTO ...
                    (...)
        SELECT Date, Quantity
        FROM            dbo.ListCount(...)

        FETCH NEXT FROM curs   
        INTO ...;
    END
END

我收到错误:"System.Data.SqlClient.SqlException: Transaction context in use by another session." 结果 window 这个错误出现多次,我想每次进入 FETCH 循环都会出现一次。

执行 INSERT...SELECT 应该会导致系统生成的事务将 INSERTSELECT 绑定在一起作为原子操作。从 .NET 4.0 或 4.5 开始,SqlConnection 的默认行为是 EnlistTrue,而在 .NET Framework 的早期版本中它默认为 False。当 EnlistTrue 时,新连接将尝试加入现有事务。

尝试将 Enlist=False; 添加到连接字符串。

有关一般使用 SQLCLR 的更多信息,请访问 SQLCLR.org