2016-06-21 53 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

    听起来很完美 –

    相关问题