2015-07-03 52 views
0

使用sp_procoption它成功执行存储过程“MyBackgroundTask”sp_procoption不执行strored程序与OPENQUERY

sp_procoption @ProcName = 'MyBackgroundTask', 
      @OptionName = 'startup', 
      @OptionValue = 'on' 

在主DB其实习生调用存储过程在我的数据库

use master 

    CREATE PROCEDURE MyBackgroundTask 
    AS 
    BEGIN 

    /* 
    . 
    . 
    . 

    */ 

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

    END; 

该作品除了当MyDatabseStoredProcedure包含关于链接服务器上的查询时,除外

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

为什么上面的代码行不起作用?

reference

回答

0

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

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