急!急!
1 错误描述
MASTERDBSV \administratr。无法从远程服务器'TRADEMERCHANT'
'spSyncProducts_BranchProducts'的结果无法传递。 
[SQLstate 42000](错误7221)
[SQLstate 01000](错误7312)。步骤失败。
补充说明:
MASTERDBSV 本地服务器名
TRADEMERCHANT link server
'spSyncProducts_BranchProducts'是TRADEMERCHANT link server的存储过程MASTERDBSV 服务器  Windows2003 sp2  SQL Server 2000 
TRADEMERCHANT服务器  Windows2000 sp2  SQL Server 2000 
JOB的内容是  MASTERDBSV服务器的存储过程调用RADEMERCHANT服务器的存储过程 'spSyncProducts_BranchProducts'
MASTERDBSV服务器的存储过程里面用的是游标,游标循环过程中出的错,前几步循环已经成功2 现在的情况:
有时候会正常执行,有时候会失败,原因不明。有时候失败后接着执行就成功了。 
到底是不是和环境有关系,也不清楚,研究了好几天,问了好多高手都没搞明白,愚昧啊
希望各位高手来帮帮忙。小弟谢谢了。

解决方案 »

  1.   

    A. 使用用于 SQL Server 的 Microsoft OLE DB 提供程序
    使用用于 SQL Server 的 OLE DB 创建链接服务器 
    下面的示例创建一台名为 SEATTLESales 的链接服务器,该服务器使用用于 SQL Server 的 Microsoft OLE DB 提供程序。USE master
    GO
    EXEC sp_addlinkedserver 
        'SEATTLESales',
        N'SQL Server'
    GO在 SQL Server 的实例上创建链接服务器 
    此示例在 SQL Server 的实例上创建一台名为 S1_instance1 的链接服务器,该服务器使用 SQL Server 的 Microsoft OLE DB 提供程序。EXEC    sp_addlinkedserver    @server='S1_instance1', @srvproduct='',
                                    @provider='SQLOLEDB', @datasrc='S1\instance1'添加链接服务器没
      

  2.   

    不同服务器数据库之间的数据操作 --创建链接服务器 
    exec sp_addlinkedserver  'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 
    select * from ITSV.数据库名.dbo.表名 --导入示例 
    select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器 
    exec sp_dropserver  'ITSV ', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource) 
    --1、openrowset --查询示例 
    select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --生成本地表 
    select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --把本地表导入远程表 
    insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 
    select *from 本地表 --更新本地表 
    update b 
    set b.列A=a.列A 
    from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b 
    on a.column1=b.column1 --openquery用法需要创建一个连接 --首先创建一个连接创建链接服务器 
    exec sp_addlinkedserver  'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    --查询 
    select * 
    FROM openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') 
    --把本地表导入远程表 
    insert openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') 
    select * from 本地表 
    --更新本地表 
    update b 
    set b.列B=a.列B 
    FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as a  
    inner join 本地表 b on a.列A=b.列A --3、opendatasource/openrowset 
    SELECT  * 
    FROM  opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta 
    --把本地表导入远程表 
    insert opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名 
    select * from 本地表  
     
     
     参考
      

  3.   

    MASTERDBSV服务器的存储过程里面用的是游标,游标循环过程中出的错,前几步循环已经成功 循环过程中出错?
    可能是网络问题
      

  4.   

    出错之后,把job调用改到在查询分析器执行,执行成功,而且在查询分析器执行时从来没出过错误 
      

  5.   

    好像不是代码问题,job调用的语句和在查询分析器执行是一样的。
      

  6.   

    如果可能的话 重建JOB和链接服务器试下 
      

  7.   

    时灵时不灵的话,网络因素可能性比较大,跟踪下网络是否经常有丢包情况。重建JOB也值得尝试,如果没条件,找另一台机器新建一个相同的作业,观察一下情况,对比一下就知道问题所在了。
      

  8.   


    JOB步骤中设定失败进行重试,每一步都设下。
      

  9.   

    因为该job执行关联地方很多,不能花太多的时间。如果失败不能及时复旧,损失可就惨了