【问题标题】:Run C# code inside a SQL Agent Job在 SQL 代理作业中运行 C# 代码
【发布时间】:2011-07-11 15:06:13
【问题描述】:

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

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

【问题讨论】:

    标签: c# sql-server sql-agent-job


    【解决方案1】:

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

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

    【讨论】:

    • 我不想这样走。但我只是从我的 webapp 中取出我的代码并创建了一个控制台应用程序。这现在可以从我的应用程序中专门捆绑,并允许我作为 CmdExec 运行它
    • 我建议您拥有一个非常精简的控制台应用程序,而是将您的实际代码放在共享的 DLL 或 Web 服务中。
    【解决方案2】:

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

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

    最后,如果您的应用程序“非常”简单,您可能希望考虑将数据库更新调用封装在一个简单的控制台应用程序中。这样您就可以简单地通过Task Scheduler built into Windows 调用应用程序以在特定日期/时间等运行。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • @Hasnain:您可以轻松地将任何依赖的 dll 注册到 GAC 中,因此无需限制 CLR 函数的范围。
      • @Brian:是的,我知道可以做到。但是,MS 警告说,不能保证所有自定义 dll 都能正常工作,因此这取决于类型,以及测试:)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多