转:SQL跨域调用远程SP返回的纪录集遇MSDTC分布式异常的处理

一)针对MSDTC异常,通常解决办法如下,
     首先确保在控制面板-添加或删除程序-添加/删除Windows组件-Application server中确保DTC可用.
     Step1,对处于不同域中的两台server,更新 c:"windows"system32"drivers"etc"hosts ,分别添加对方的IP,Computer Name.
转:SQL跨域调用远程SP返回的纪录集遇MSDTC分布式异常的处理
 
     Step2,单击菜单,进入运行选项,输入  ‘dcomcnfg’ ,将会显示下面界面.
 
转:SQL跨域调用远程SP返回的纪录集遇MSDTC分布式异常的处理 
     Step3,选择下图红色区域项.
  转:SQL跨域调用远程SP返回的纪录集遇MSDTC分布式异常的处理
 
     Step4,按下图进行安全配置
转:SQL跨域调用远程SP返回的纪录集遇MSDTC分布式异常的处理

     Step5,点击确定后,系统将自动重启 MSDTC,SQL Server等服务.

 

二)SQL调用远程SP的纪录集,不使用MSDTC

--------------------------------------------------------------------------------------------------------
--
-预备条件:创建链接服务器
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
exec sp_serveroption 'srv_lnk','rpc out','true'  --这个允许调用链接服务器上的存储过程

--------------------------------------------------------------------------------------------------------
--
-方法一
--
----Truncate/Create/Insert table at remote server 
Declare @iSQL nvarchar(300 )
if Exists(select * from [172.26.16.4].SMTOTHER.dbo.sysobjects where name =N'__TempCheckResult' AND type=N'U'

Begin

    
set @iSQL=N'Truncate Table __TempCheckResult'
    
EXEC [172.26.16.4].SMTOTHER.dbo.sp_executesql @iSQL
End
Else
Begin
    
set @iSQL=N'Create Table __TempCheckResult(iResult varchar(50))'
    
EXEC [172.26.16.4].SMTOTHER.dbo.sp_executesql @iSQL
End

set @iSQL=N'Insert into __TempCheckResult Exec [CopyPackingSNforM2CheckBySN] '+''''+'W884103RJ5VSA'+''''
EXEC [172.26.16.4].SMTOTHER.dbo.sp_executesql @iSQL

select *  from [172.26.16.4] .SMTOTHER.dbo.__TempCheckResult

---------------------------------------------------------------------------------------------------------------

--
-方法二
--
----Truncate/Create/Insert table at remote server  for SQL2005
Declare @iSQL nvarchar(300 )
if Exists(select * from [172.26.16.4].SMTOTHER.dbo.sysobjects where name ='__TempCheckResult' AND type=N'U'

Begin

    
set @iSQL=N'Truncate Table SMTOTHER.dbo.__TempCheckResult'
    
EXECUTE(@iSQL) AT [172.26.16.4]
End
Else
Begin
    
set @iSQL=N'Create Table SMTOTHER.dbo.__TempCheckResult(iResult varchar(50))'
    
EXECUTE(@iSQL) AT [172.26.16.4]
End

set @iSQL=N'Insert into SMTOTHER.dbo.__TempCheckResult Exec SMTOTHER.dbo.[CopyPackingSNforM2CheckBySN] '+''''+'W884103RJ5VSA'+''''
EXECUTE(@iSQL) AT [172.26.16.4]

select *  from [172.26.16.4].SMTOTHER.dbo.__TempCheckResult

你可能感兴趣的:(sql)