我有一个Azure SQL数据库,我有时想要执行临时SQL语句,这可能需要很长时间才能完成。例如,要创建索引,请从大表中删除记录或在表之间复制数据。由于涉及的数据量很大,这些操作可能需要5分钟到几个小时。
我注意到如果在SSMS中执行SQL语句,那么在执行完成之前,如果SSMS失去与服务器的连接,整个事务将自动回滚。这对于长时间运行的查询是有问题的,例如在本地wifi连接问题的情况下,或者如果我只是想关闭我的计算机离开办公室。
有没有办法指示SQL Server或SSMS执行SQL语句而不需要打开连接?我们不能使用SQL Server代理作业,因为这是一个Azure SQL数据库,如果可能的话,我们希望避免使用基于其他Azure服务的解决方案,因为这只是为了满足简单的Ad-hoc需求。
我们在SSMS中尝试了“执行后丢弃结果”选项,但是在语句完成执行之前,这仍然保持打开连接:
它不是我正在寻找的异步解决方案,因为我并不真正关心执行结果(我总是可以检查查询是否仍在运行,例如使用sys.dm_exec_requests
)。换句话说,一个简单的“即发即忘”机制用于T-SQL查询。
答案 0 :(得分:1)
虽然我的最初要求表明我们不想使用其他Azure服务,但我发现使用Azure Data Factory似乎是解决问题的最经济高效且最简单的方法。此处提出的其他解决方案似乎都遭受了高昂的成本(启动虚拟机)或超时限制(Azure函数,Azure自动化运行手册)的困扰,当用于此目的时,这些限制均不适用于ADF。
想法是:
由于在Data Factory中没有进行任何数据移动,因此该解决方案非常便宜,而且我使用这种方法运行了10多个小时的查询,效果很好。
答案 1 :(得分:0)
如果您可以在存储过程中放置即席查询,则可以schedule在服务器上运行,假设您具有必要的权限。
请注意,这可能不是一个好主意,但应该有效。
答案 2 :(得分:0)
不幸的是,如果没有SSMS中的开放连接,我认为您将无法完成查询。
我可以建议以下方法: