我有一段代码需要在指定时间每天运行。现在的代码就是我的Web应用程序的一部分。有两个存储过程来获取/保存代码使用的数据。
如何设置Microsoft SQL Server Management Studio 2008 R2以执行我的代码以及SQL代理作业中的存储过程。我以前从未这样做过,似乎无法找到文档。
答案 0 :(得分:17)
最简单的方法是创建一个.NET控制台应用程序,它只是一个shell,用于存放在DLL或Web服务中或任何地方的真实代码。然后,在SQL代理作业中,创建一个调用控制台应用程序的“操作系统(CmdExec)”类型的步骤。为您节省SSIS的麻烦(这是一个主要要避免的麻烦)。我也同意@Hasanain的说法,.NET proc可能是另一种合理的选择。
还有一点需要注意。 SQL代理CmdExec将查找整数返回码,因此您的public static int Main(string args[]) {}
方法返回0表示成功,一些负数表示失败。或者,如果你抛出异常,那也可以正常工作。并且SQL代理将记录您投掷的任何文本,因为控制台应用程序将其写入stdout / stderr。
答案 1 :(得分:10)
您应该阅读Sql Server Integration Services (SSIS)。然后,您可以安排SSIS包,它们是sql功能的单位。在SSIS包中,您可以运行脚本作业并调用CLR(公共语言运行时 - 即.Net作业)函数来执行.net代码。
但有一件事,你可能会以略微倒退的方式思考这个问题。使用SSIS调度调用某些sql的代码执行的主要原因是什么?如果是这样,我建议您研究/使用Windows Workflow Foundation (WWF)。这是一个用于开发和运行“长期”.net活动的.net框架。在简单的层面上,您可以将其视为.Net程序的SSIS等效项。它可以直接构建到您的.Net应用程序中,而无需任何SQL Server SSIS知识。
最后,如果您的应用程序“非常”简单,您可能希望考虑在简单的控制台应用程序中包装数据库更新调用。这样,您只需通过Task Scheduler built into Windows调用应用程序即可在特定日期/时间等运行
答案 2 :(得分:2)
您可以创建.NET存储过程,并将其添加到SQL Server。然后创建一个将调用该新存储过程的SQL代理作业。
.Net存储过程基本上必须限于已经嵌入在SQL Server中的一小组.NET库。您可以添加自己的自定义dll,以确保所有必需的功能都可用。但是,鉴于MS发出警告,无法保证所有自定义dll都能正常工作,只需要进行严格的测试即可确保。