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

Tom*_*Tom 13 c# sql-server sql-agent-job

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

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

mat*_*mc3 17

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

在此输入图像描述

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


Bri*_*ott 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知识.

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