2011-03-31 313 views
1

我使用SQL Server 2008和.NET 3.5 Framework。以编程方式创建SQL作业

在我的程序中,数据库上的存储过程根据用户输入而改变。

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

所以,我想写一个SQL程序来改变存储过程的程序是由程序创建的。

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

+0

是否有一个原因,你不想使用绑定变量来做到这一点? – 2011-03-31 06:59:09

+0

你想只更新存储的特效?如果是这样,你为什么需要这份工作呢? – tobias86 2011-03-31 07:00:11

+0

@ tobias86你知道更好的方法吗? @ pm_2我不知道绑定变量,但现在搜索。 – 2011-03-31 07:14:08

回答

4

可以通过编程做在两个方面:

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工作要做到这一点,您可能必须使用上面的示例,但是执行将添加SQL作业的命令而不是strAlterProcCommandText = "ALTER PROC..."。通常我生成这样一个sqljob查询:

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

希望你有我的想法。

+0

改变将在某些日期发生。例如,它将在今天的代码中添加一些代码,并在下个月删除代码。但是,所有这些日期都是由仅知道应用程序UI的用户给出的。所以,这个工作需要通过应用程序来创建,或者一个Windows服务是必不可少的? – 2011-03-31 07:47:48

+0

嗯,我想这应该取决于你的需求。无论如何,我确信有很多不同的方式来完成这项工作。例如,您可以尝试使用SMO命名空间中的Job类来处理来自C#的作业。查看本手册:http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.agent.job.aspx – Genius 2011-03-31 09:17:51