2009-01-21 167 views
1

我使用链接的服务器传输执行此QRY我得到的错误,当使用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 

“无交易活动”

回答

1

检查MS DTC配置数据(剪切和粘贴一个文档,未选中最近):

  1. 开始,运行,DCOMCNFG.EXE

  2. 在“组件服务”窗口中,展开“组件服务...计算机...我的电脑”。

  3. 用鼠标右键单击我的电脑,属性。

  4. 单击MSDTC选项卡上的安全配置。

  5. 单击以选中网络DTC访问复选框。

  6. 同时设置允许入站和出站允许复选框

  7. 根据事务管理器通信组,单击以选中不要求进行验证选项。

  8. 确认DTC登录帐户名称已设置为NT AUTHORITY \ NetworkService。

  9. 点击Ok等

在你的代码,Set identity_Insert Crnot只适用于本地对象。

它应该是动态SQL的一部分INSERT