2015-07-03 57 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代理作業,它將由您的過程生成並具有一個小的等待計時器。它將在啓動後執行幾秒/分鐘並在執行後自行刪除。這可能是一個解決方案,但如果您的代理在重新啓動後不能啓動,它可能會失敗。