日期:2014-05-18  浏览次数:20393 次

菜鸟请教有关在存储过程中无法创建远程连接的问题? 谢谢.

CREATE   PROCEDURE   test_JO_D1124
  AS

        exec   sp_addlinkedserver         'srv_link ', ' ', 'SQLOLEDB ', 'OC_CHINA '

        exec   sp_addlinkedsrvlogin   'srv_link ', 'false ',null, 'sa ', '12345 '

       
        SET   REMOTE_PROC_TRANSACTIONS   ON

        BEGIN   DISTRIBUTED   TRANSACTION


        update   A
        set     A.PR_M_UDF8_NV= 'computer2 '    
        FROM   srv_link.jmidb.dbo.INM_PUR_M   as   A
        WHERE   (A.PR_M_PRNO_C   =   000001)

   
        update   dbo.INM_PUR_M
        set     PR_M_UDF8_NV= 'computer1 '    
        FROM   dbo.INM_PUR_M
        WHERE   (PR_M_PRNO_C   =   '000002 ')


        COMMIT   TRANSACTION

        exec   sp_dropserver   'srv_link ', 'droplogins '

      GO


建立上述存储过程,用来更新远程数据库及本地数据数据库的数据保存时出下面提示:

Error   7202:   Could   not   find   server   'srv_link '   in   sysservers,Execute   sp_addlinkedserver   to   add   the   server   to   sysservers


请问是什么原因,我试过在SQL   Query   Analyzer是可以创建远程连接的.
谢谢!




------解决方案--------------------
帮楼主试了好象也是不行,不过用两种方法解决:
(1)用两个存储过程
CREATE PROCEDURE test_JO_D1124_1
AS
exec sp_addlinkedserver 'srv_link ', ' ', 'SQLOLEDB ', 'OC_CHINA '
exec sp_addlinkedsrvlogin 'srv_link ', 'false ',null, 'sa ', '12345 '
go

CREATE PROCEDURE test_JO_D1124_2
AS
SET REMOTE_PROC_TRANSACTIONS ON
BEGIN DISTRIBUTED TRANSACTION
update A
set A.PR_M_UDF8_NV= 'computer2 '
FROM srv_link.jmidb.dbo.INM_PUR_M as A
WHERE (A.PR_M_PRNO_C = 000001)

update dbo.INM_PUR_M
set PR_M_UDF8_NV= 'computer1 '
FROM dbo.INM_PUR_M
WHERE (PR_M_PRNO_C = '000002 ')
COMMIT TRANSACTION
exec sp_dropserver 'srv_link ', 'droplogins '
go

(2)直接用openrowset(临时访问)
CREATE PROCEDURE test_JO_D1124
AS
SET REMOTE_PROC_TRANSACTIONS ON
BEGIN DISTRIBUTED TRANSACTION
update A
set A.PR_M_UDF8_NV= 'computer2 '
FROM openrowset( 'SQLOLEDB ', 'OC_CHINA '; 'sa '; '12345 ',jmidb.dbo.INM_PUR_M) as A
WHERE (A.PR_M_PRNO_C = 000001)

update dbo.INM_PUR_M
set PR_M_UDF8_NV= 'computer1 '
FROM dbo.INM_PUR_M
WHERE (PR_M_PRNO_C = '000002 ')
COMMIT TRANSACTION
GO

------解决方案--------------------
CREATE PROCEDURE test_JO_D1124
AS

exec sp_addlinkedserver 'srv_link ', ' ', 'SQLOLEDB ', 'OC_CHINA '

exec sp_addlinkedsrvlogin 'srv_link ', 'false ',null, '