如何在SSIS中以编程方式创建执行T-SQL语句任务?

时间:2012-06-28 16:03:28

标签: c# ssis

我用C#以编程方式创建SSIS包。我正在使用Visual Studio 2010并为SQL Server 2012开发。

直到知道我正在使用执行SQL任务但是对于特定的语句,我知道需要使用 Excecute T-SQL语句任务,我无法想象如何以编程方式创建它们。

我创建常规SQL任务的方式如下:

Executable exec = parent.Executables.Add("STOCK:TSQLTask");
TaskHost task = exec as TaskHost;
task.Properties["Name"].SetValue(task, name);
task.Properties["Description"].SetValue(task, description);
task.Properties["Connection"].SetValue(task, connMgr.Name);
task.Properties["SqlStatementSource"].SetValue(task, sqlStatement);

创作过程的灵感来自于此MSDN Guide中描述的创作过程。重要的方法是第一个。方法标题:

Executable Executables.Add(string moniker)

我从this特定页面获得了绰号。不幸的是,提供的列表不包含执行T-SQL语句任务的名字对象。我仍然认为必须以某种方式以编程方式创建这样的任务。

有人知道如何实现这一目标吗? 谢谢!


感谢William Todd Salzman的回答,我可以使用以下方式创建所述任务:

Executable tsqlExec = p.Executables.Add(typeof(Microsoft.SqlServer.Management.DatabaseMaintenance.DbMaintenanceTSQLExecuteTask).AssemblyQualifiedName);

1 个答案:

答案 0 :(得分:2)

从你提到的页面中你得到了Moniker列表:

  

如果您更喜欢更明确的语法,或者您要添加的任务没有STOCK   moniker,您可以使用其长名称将任务添加到可执行文件中。此语法要求您还指定任务的版本号。

  Executable exec = package.Executables.Add(
    "Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask, " +
    "Microsoft.SqlServer.ScriptTask, Version=10.0.000.0, " +
    "Culture=neutral, PublicKeyToken=89845dcd8080cc91");
  

您可以通过使用类的AssemblyQualifiedName属性以编程方式获取任务的长名称,而无需指定任务版本,如以下示例所示。此示例需要引用Microsoft.SqlServer.SQLTask程序集。

using Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask;
...
      Executable exec = package.Executables.Add(
        typeof(Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ExecuteSQLTask).AssemblyQualifiedName);