Sql server sp_procoption未使用OPENQUERY执行存储过程

Sql server sp_procoption未使用OPENQUERY执行存储过程,sql-server,stored-procedures,openquery,Sql Server,Stored Procedures,Openquery,使用sp_procoption,它成功执行存储过程“MyBackgroundTask” 在主数据库上,哪个实习生调用我数据库中的存储过程 use master CREATE PROCEDURE MyBackgroundTask AS BEGIN /* . . . */ execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure]; END

使用sp_procoption,它成功执行存储过程“MyBackgroundTask”

在主数据库上,哪个实习生调用我数据库中的存储过程

   use master 

   CREATE PROCEDURE MyBackgroundTask
   AS
   BEGIN

     /*
     .
     .
     .

     */

     execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure]; 

   END;
除非MyDatabaseStoredProcedure包含链接服务器上的查询,否则此操作正常

  Insert Into [LOCALTABLE] (id, name)
  Select    id, name
  from OPENQUERY(LINKED_SERVER, 'SELECT * FROM RemoteDB.RemoteTable') 
为什么上面的代码行不起作用


这很简单。启动过程在与链接服务器建立连接之前触发。因此,不能在用作启动过程的存储过程中使用链接服务器

一个建议是生成一个SQL Server代理作业,该作业将由您的过程生成,并且有一个小的等待计时器。它将在启动后几秒/分钟执行,并在执行后自行删除。这可能是一个解决方案,但如果您的代理在重新启动后无法启动,则可能会失败

  Insert Into [LOCALTABLE] (id, name)
  Select    id, name
  from OPENQUERY(LINKED_SERVER, 'SELECT * FROM RemoteDB.RemoteTable')