每小时自动在MS SQL Studio中执行查询


13

我支持大型企业中的应用程序,我的职责之一是清理数据。我需要每小时执行一次查询,我想使其自动化。由于组织政策的原因,我无法创建SQL Server代理作业或修改架构,只能操作数据。

一望无际

WHILE(1=1)
BEGIN 
WAITFOR DELAY '01:00';
--do work
END

为我完成了工作,但是我对永久开放的连接感到耸耸肩。

理想情况下,我会编写脚本来编写MS SS本身,以每小时执行一次给定的代码,但是我不确定是否可行。

这个问题有解决方案吗?


1
您可以在PC上使用Windows sceduler吗?
sepupic

12
问一个有权为您安排时间的人。
Magoo先生

@sepupic如果MS SS不能帮助我,那将是我的下一个研究领域。
伊万·科谢列夫

我同意。我在客户端计算机上运行循环代码会感到非常不舒服。如果你的电脑死机,有人拔掉它等等。我已经在SQL工作是不提供给应用程序团队类似环境中工作-因为我们使用的另一种选择AutoSys或应用服务器上运行的另一个调度工具。尝试找出如何管理其他计划任务?另一个解决方法可能是使用SQL Server Reporting Services?我知道这不理想...
Terry C

9
正确的解决方案是转到DBA,并让他们创建SQL Server代理作业以每小时运行一次此清理。然后找出为什么要如此频繁地在数据库中获取需要“清理”的数据并进行修复。
alroc

Answers:


22

您的朋友是sqlcmd(Microsoft Technet)

  1. 使用运行清理作业所需的脚本创建一个SQL文件
  2. 使用sqlcmd.exe和任何必需的参数运行脚本
  3. 创建Windows计划任务并添加具有所有必需参数的命令

例如

sqlcmd -d YOUR_DB -E -i YOUR_SCRIPT.SQL -o OUTPUTFILE.TXT 

祝好运。


4
确保将这些脚本与计划任务一起放在适当的应用程序/工具服务器上,而不是放在开发计算机上。
德国GER

7

您不需要Management Studio来执行查询。

如果您真的没有选择让某人为您安排工作,则应按照hot2use答案中所述检查 sqlcmd

如果您使用的版本不受支持(因为您未指定版本),那么还有一个osql是命令行客户端,但是该工具已被弃用。

然后,您可以使用所需的任何调度程序(例如Windows Task Scheduler)来调度命令,然后运行以下命令:

OSQL -E -i c:\temp\dowork.sql

请查看文档,以了解用于服务器选择和身份验证的选项。


-1

使用MS SQL Studio中的“ SQL Server代理”(在对象资源管理器中,展开服务器,它通常应位于列表的底部)可能是最好的选择。

这将创建一个可以设置为以定义的时间间隔执行的作业。作业将作为服务在服务器而不是客户端上运行。这意味着,如果您的客户端断开连接,它将继续运行,并且如果重新启动服务器(出于未知原因),则该作业将继续运行,而无需您再次对其进行初始化。

缺点是您可能需要提升的访问权限才能执行此操作。


3
您可能已经忽略了以下问题:由于组织政策,我无法创建SQL Server代理作业[...]
Andriy M

@Andriy:仍然是正确的答案。我们不应该帮助人们在影子IT方面违背组织的需求。
Dylan Knoll

1
@DylanKnoll:好吧,我认为答题者承认OP提及该政策并加入反对其愚蠢行为的论点(例如,您的评论中的某些观点)是完全合理的,但“应该没有帮助”吗?建议并接受的选项看起来不太苛刻,因此在这种情况下遵守原则似乎有些苛刻。
Andriy M

我也明白你的意思,但是关于DBA的观点呢?听起来很像有人在试图隐藏数据库设计中的错误,以便不会被发现。
Dylan Knoll

1
在将其更改为“ SQL Server代理作业”之前,它将读取“ SQL Server作业”。我认为前者没有别的意思。(顺便说一下,不是OP进行编辑;而是完全按照我的方式理解并改正了这个略有错误的术语的人。)但是,原始措词甚至更容易被忽略,因此,无论如何,我仍然认为那是您的疏忽:)
Andriy M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.