gpt4 book ai didi

sql-server - "Fire and forget"SSMS 中的 T-SQL 查询

转载 作者:行者123 更新时间:2023-12-02 02:57:10 24 4
gpt4 key购买 nike

我有一个 Azure SQL 数据库,有时我想在其中执行临时 SQL 语句,这可能需要很长时间才能完成。例如创建索引,从一个巨大的表中删除记录或在表之间复制数据。由于涉及的数据量很大,这些操作可能需要 5 分钟到几个小时不等。

我注意到,如果在 SSMS 中执行 SQL 语句,那么整个事务将自动回滚,以防 SSMS 在执行完成之前失去与服务器的连接。这对于长时间运行的查询来说是有问题的,例如在本地 wifi 连接问题的情况下,或者如果我只是想关闭计算机以离开办公室。

有什么方法可以指示 SQL Server 或 SSMS 在不需要打开连接的情况下执行 SQL 语句?我们不能使用 SQL Server 代理作业,因为这是一个 Azure SQL 数据库,并且我们希望尽可能避免基于其他 Azure 服务的解决方案,因为这只是为了满足简单的临时需求。

我们在 SSMS 中尝试了“Discard results after execution”选项,但这仍然保持打开的连接,直到语句完成执行: enter image description here

这不是我正在寻找的异步解决方案,因为我并不真正关心执行结果(我总是可以使用例如 sys.dm_exec_requests 检查查询是否仍在运行) .换句话说,这是一种用于 T-SQL 查询的简单“即发即弃”机制。

最佳答案

虽然我最初的要求表明我们不想使用其他 Azure 服务,但我发现使用 Azure 数据工厂似乎是解决问题的最具成本效益和最简单的方法。此处提出的其他解决方案似乎存在高成本(启动 VM)或超时限制(Azure Functions、Azure Automation Runbooks)的问题,当用于此目的时,这些都不适用于 ADF。

思路是:

  1. 将长时间运行的 SQL 语句放入存储过程
  2. 创建一个包含存储过程事件的数据工厂管道,以在数据库上执行 SP。确保将事件的超时和重试值设置为合理的值。
  3. 触发管道

由于数据工厂中没有发生数据移动,此解决方案非常便宜,而且我使用此方法运行了 10 多个小时的查询,效果很好。

关于sql-server - "Fire and forget"SSMS 中的 T-SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48701547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com