我正在使用链接服务器使用MSDTC传输数据
Alter Proc [dbo].[usp_Select_TransferingDatasFromServerCheckingforExample]
@RserverName varchar(100), ----- Server Name
@RUserid Varchar(100), ----- server user id
@RPass Varchar(100), ----- Server Password
@DbName varchar(100) ----- Server database
As
Set nocount on
Set Xact_abort on
Declare @user varchar(100)
Declare @userID varchar(100)
Declare @Db Varchar(100)
Declare @Lserver varchar(100)
Select @Lserver = @@servername
Select @userID = suser_name()
select @User=user
Exec('if exists(Select 1 From [Master].[' + @user + '].[sysservers] where srvname = ''' +
@RserverName + ''') begin Exec sp_droplinkedsrvlogin ''' + @RserverName + ''',''' + @userID +
''' exec sp_dropserver ''' + @RserverName + ''' end ')
declare @ColumnList varchar(max)
set @ColumnList = null
Select @ColumnList = case when @ColumnList is not null then @ColumnList + ',' + quotename(name) else quotename(name) end
From syscolumns where Id = object_id('Crnot') order by colid
Set identity_Insert Crnot On
exec ('Insert Into ['+ @RserverName + '].'+ @DbName + '.'+ @user +'.Crnot ('+ @ColumnList +') Select '+ @ColumnList +' from Crnot ')
Set identity_Insert Crnot Off
Exec sp_droplinkedsrvlogin @RserverName,@userID
Exec sp_dropserver @RserverName
执行此qry时,我收到错误“No transaction Active”
答案 0 :(得分:1)
检查您的MS DTC配置(从文档剪切和粘贴,最近未检查):
启动,运行,dcomcnfg.exe
在“组件服务”窗口中,展开“组件服务...计算机...我的电脑”。
右键单击“我的电脑”,“属性”。
单击MSDTC选项卡上的安全配置。
单击以选中“网络DTC访问”复选框。
同时设置“允许入站”和“允许出站”复选框
在“事务管理器通信”组下,单击以选中“无需身份验证”选项。
验证DTC登录帐户名称是否设置为NT AUTHORITY \ NetworkService。
点击Ok等
在您的代码中,Set identity_Insert Crnot
仅适用于本地对象。
它应该是动态SQL INSERT