在SQL代理作业中运行C#代码

我有一段代码需要在指定的时间每天运行。 现在的代码就是我的Web应用程序的一部分。 有两个存储过程来获取/保存代码使用的数据。

如何设置Microsoft SQL Server Management Studio 2008 R2以执行我的代码以及SQL代理作业中的存储过程。 我以前从未这样做过,似乎无法找到文档。

最简单的方法是创建一个.NET控制台应用程序,它只是一个shell,用于存放在DLL或Web服务中或任何地方的真实代码。 然后,在SQL代理作业中,创建一个调用控制台应用程序的“操作系统(CmdExec)”类型的步骤。 为您节省SSIS的麻烦(这是一个要避免的主要麻烦)。 我也同意@Hasanain,.NET proc可能是另一个合理的选择。

在此处输入图像描述

还有一点需要注意。 SQL Agent CmdExec将查找整数返回码,因此使用public static int Main(string args[]) {}方法返回0表示成功,返回一些负数表示失败。 或者,如果你抛出exception,那也可以正常工作。 并且SQL代理将记录您投掷的任何文本,因为控制台应用程序将其写入stdout / stderr。

您应该阅读Sql Server Integration Services(SSIS) 。 然后,您可以安排SSIS包,它们是sqlfunction的单位。 在SSIS包中,您可以运行脚本作业并调用CLR(公共语言运行时 – 即.Net作业)函数来执行.net代码。

但有一件事,你可能会以略微倒退的方式思考这个问题。 使用SSIS安排调用某些sql的代码执行的主要原因是什么? 如果是这样,我建议您研究/使用Windows Workflow Foundation(WWF) 。 这是一个用于开发和运行“长期”.net活动的.net框架。 在简单的层面上,您可以将其视为.Net程序的SSIS等效项。 它可以直接构建到您的.Net应用程序中,而无需任何SQL Server SSIS知识。

最后,如果您的应用程序“非常”简单,您可能希望考虑在简单的控制台应用程序中包装数据库更新调用。 这样您就可以通过Windows内置的任务计划程序调用应用程序,以便在特定日期/时间等运行。

您可以创建.NET存储过程,并将其添加到SQL Server。 然后创建一个将调用该新存储过程的SQL代理作业。

.Net存储过程基本上必须限于已经嵌入在SQL Server中的一小组.NET库。 您可以添加自己的自定义dll,以确保所有必需的function都可用。 但是,鉴于MS发出警告,不能保证所有自定义dll都能正常工作,只需要进行严格的测试即可确保。