【问题标题】:Creating SQL Job Programmatically以编程方式创建 SQL 作业
【发布时间】:2011-03-31 06:54:39
【问题描述】:

我使用 SQL Server 2008 和 .NET 3.5 Framework。

在我的程序中,数据库上的存储过程会根据用户输入进行更改。

用户可以确定他的任务的日期。

所以,我想编写程序,让用于更改存储过程的 SQL 作业由程序创建。

如何以编程方式创建作业?

【问题讨论】:

  • 您是否有理由不想使用绑定变量来执行此操作?
  • 您是否尝试仅更新存储的过程?如果是这样,你为什么需要这份工作来做呢?
  • @tobias86 你知道更好的方法吗? @pm_2 我不知道绑定变量,但现在搜索。
  • @Ahmet:您可以尝试将ALTER PROCEDURE 脚本发送到 SQL Server,而不是编写脚本并启动作业(无论如何您都必须指定修改后的 SP)。这是你想要完成的事情吗?
  • @Ahmet - 如果您发布了您尝试创建的查询...

标签: c# .net sql sql-job


【解决方案1】:

您可以通过两种方式以编程方式进行:

1。 如果您只需要更改程序:

// written from the head
...
using System.Data.SqlClient;
using Smo = Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

string strConnectionString = ".......";
string strAlterProcCommandText = "ALTER PROC dbo.blablabla (..) AS .......\r\nGO";

using (var conn = new SqlConnection(strConnectionString))
{
  conn.Open();
  var server = new Smo.Server(new ServerConnection(conn));
  var result = server.ConnectionContext.ExecuteNonQuery(strAlterProcCommandText);
  Console.WriteLine("Result: " + result);
}

2。 或者,如果您想使用 SQL 作业执行此操作,您可能必须使用上面的示例,但不是 strAlterProcCommandText = "ALTER PROC..." 而是执行将添加 SQL 作业的命令。通常我是这样生成sqljob查询的:

  1. 打开 SQL Server Management Studio
  2. 在某些服务器的“对象资源管理器”窗口中,我转到:SQL Server 代理 » 作业 » 鼠标右键单击 » 新建作业...
  3. 然后创建一个看起来像我想要执行的简单作业,为创建的作业命名
  4. 右键单击添加的作业并在上下文菜单中按照以下方式操作:将作业编写为 » 创建到 » 新查询编辑器窗口
  5. 复制生成的脚本,根据需要进行参数化,然后放到strAlterProcCommandText

希望你明白我的想法。

【讨论】:

  • 更改将在某些日期发生。例如,它将在今天将一些代码添加到 proc 中,并在下个月删除代码。但是所有这些日期都是由只知道应用程序 UI 的用户给出的。那么,作业需要由应用程序创建还是windows服务是必不可少的?
  • 嗯,我想这应该取决于您的需求。无论如何,我确信有很多不同的方法可以完成这项工作。例如,您可以尝试使用 SMO 命名空间中的 Job 类来操作 C# 中的作业。看看这个手​​册:msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 2014-03-01
  • 2019-09-28
相关资源
最近更新 更多