2016-06-21 79 views
0

我的目標是在遠程服務器上啓動一個查詢,從表中刪除一些行。 問題是查詢需要花費很多時間才能完成,而且我不希望客戶端等待其完成(也因爲我們每秒支付該過程的工作,這是一個Azure自動化PowerShell作業)。 有沒有辦法做到這一點? [編輯]我的sql服務器是一個Azure SQL服務器,然後我不能使用代理SQL。我只是想知道它是否存在一種方法來運行查詢,而不會等待其結果。[/編輯]如何在不等待ms sql結果的情況下執行查詢?

+0

您可以使用服務代理異步運行過程,但仍然有效,在這裏:http://rusanu.com/2009/08/05/asynchronous-procedure-execution/ –

+0

如果你可以從powershell運行它,你可以使用作業或RunSpaces – Avshalom

+0

用戶是否需要啓動刪除過程,還是使用無人值守的過程? –

回答

-1

在SQL Server上。

  1. 創建存儲過程從表中刪除行。
  2. 在啓用RPC的情況下(TRUE)在遠程服務器上創建鏈接服務器。

使用此鏈接幫助https://technet.microsoft.com/en-us/library/ff772782(v=sql.105).aspx

  • 要刪除的記錄執行存儲過程

    EXEC [RemoteServer] .DatabaseName.DatabaseOwner.StoredProcedureName 
    
  • 有關異步過程執行的詳細信息。訪問 http://rusanu.com/2009/08/05/asynchronous-procedure-execution/

    感謝

    +0

    請解釋這將如何以異步方式行事,與在本地系統上執行sproc有什麼不同。 – vonPryz

    +0

    您可以訪問http://rusanu.com/2009/08/05/asynchronous-procedure-execution/ –

    1

    您可以使用.NET API SqlCommand.BeginExecuteNonQuery,將允許異步提交查詢執行請求,並繼續執行其他任務。當查詢結果可用時,將執行回調,但如果您對實際結果不感興趣,則可以放置一個空實現。

    +0

    是否可以在azure自動化中的ps腳本中執行此操作? –

    +0

    是的。我沒有一個可以方便地使用BeginExecuteNonQuery的runbook的例子,但這裏是使用同步版本的例子 - ExecuteNonQuery:https://gallery.technet.microsoft.com/scriptcenter/Azure-Automation-Your-SQL-30f8736b #內容。您可以按照該示例將** ExecuteNonQuery **替換爲** BeginExecuteNonQuery **並傳遞適當的參數。剛剛調用** BeginExecuteNonQuery **之後的代碼行將在不等待查詢結果的情況下執行。 –

    +0

    聽起來很完美 –