--select * from uscerp.usc_test.unierp.t_s
--delete from uscerp.usc_test.unierp.t_s--exec usp_t_salter proc  usp_t_s
as exec sp_addlinkedserver   'TEST', ' ', 'SQLOLEDB', '192.168.1.2' 
exec sp_addlinkedsrvlogin  'TEST', 'false',null, 'unierp', 'unierp' insert into uscerp.usc_test.unierp.t_s
select '1','1'
union all
select '2','2'
union all
select '3','3'
union all
select '4','4'exec sp_dropserver  'TEST', 'droplogins' 建立了这个存储过程。
在用户名UNIERP下登录。使用查询分析器执行该存储过程。没有问题远端的服务器 '192.168.1.2' 的表t_s
中数据插入正常。
但是我在建立了作业。作业的属性的的所有者都设置成了UNIERP用户。但是执行的时候错误。在windoW事件中显示
【SQL Server Scheduled Job 'test' (0xB350642A2FA95349A99864F975A3C1A3) - Status: 失败 - Invoked on: 2009-07-07 15:18:34 - Message: 作业失败。  用户 YUQI\administrator 唤醒调用了该作业。最后运行的步骤是第 1 步(1)。】
以上的表和存储过程都是在查询分析器中UNIERP用户登录后建立的。
*还有一个问题是我用SA登陆查询分析器以后
create proc  usp_t_s
as exec sp_addlinkedserver   'TEST', ' ', 'SQLOLEDB', '192.168.1.2' 
exec sp_addlinkedsrvlogin  'TEST', 'false',null, 'unierp', 'unierp' insert into uscerp.usc_test.unierp.t_s
select '1','1'
union all
select '2','2'
union all
select '3','3'
union all
select '4','4'exec sp_dropserver  'TEST', 'droplogins' 
一样建立存储过程。在建立作业。作业所有者为SA。作业执行的时候没有问题。通过!*小弟不明白了。难道一定要SA用户才能使用链接服务器,为什么查询分析器中可以执行的,在作业调度里面就执行不了了?

解决方案 »

  1.   


    --创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' 把本地表导入远程表 
    insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 
      

  2.   

    不明白难道需要openrowset ,而insert into uscerp.usc_test.unierp.t_s 就不可以吗?