使用SQL Server代理在服务器上以编程方式运行远程SSIS包

时间:2009-09-14 19:14:36

标签: sql-server sql-server-2005 ssis packages

基于示例here from MSDN,如果要通过“sp_start_job”过程调用包,如何提供SSIS包级别变量?

以下是MSDN的示例代码:

Dim jobConnection As SqlConnection
Dim jobCommand As SqlCommand
Dim jobReturnValue As SqlParameter
Dim jobParameter As SqlParameter
Dim jobResult As Integer

jobConnection = New SqlConnection("Data Source=(local);Initial Catalog=msdb;Integrated Security=SSPI")
jobCommand = New SqlCommand("sp_start_job", jobConnection)
jobCommand.CommandType = CommandType.StoredProcedure

jobReturnValue = New SqlParameter("@RETURN_VALUE", SqlDbType.Int)
jobReturnValue.Direction = ParameterDirection.ReturnValue
jobCommand.Parameters.Add(jobReturnValue)

jobParameter = New SqlParameter("@job_name", SqlDbType.VarChar)
jobParameter.Direction = ParameterDirection.Input
jobCommand.Parameters.Add(jobParameter)
jobParameter.Value = "RunSSISPackage"

jobConnection.Open()
jobCommand.ExecuteNonQuery()
jobResult = DirectCast(jobCommand.Parameters("@RETURN_VALUE").Value, Integer)
jobConnection.Close()

Select Case jobResult
  Case 0
    Console.WriteLine("SQL Server Agent job, RunSISSPackage, started successfully.")
  Case Else
    Console.WriteLine("SQL Server Agent job, RunSISSPackage, failed to start.")
End Select
Console.Read()

如何为名为“RunSSISPackage”的SSIS包中的变量提供值?

2 个答案:

答案 0 :(得分:2)

您可以创建一个表来充当队列,在其中插入包含参数的行,然后启动作业。在随后运行的TSQL中,只需选择值并将队列行“C”标记为已完成,或者将其删除并继续运行。

修改

尝试查看涵盖以下所有方法的Running SSIS package programmatically

  • 使用SSIS对象模型以编程方式运行包
  • 启动DTEXEC.EXE进程。 DTEXEC是用于执行SSIS包的命令行实用程序
  • 使用SQL代理。您可以配置代理作业以运行包
  • 使用其他一些实用程序为您启动DTEXEC
  • 创建将运行包的自定义应用程序

答案 1 :(得分:0)

我们通过使用配置表或配置文件在运行时动态更改变量值。我们不允许用户运行我们的SSIS包,但我认为您的工作可以首先更新配置文件然后运行包。