1

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

据了解,我正在使用执行 SQL 任务,但对于我知道需要使用执行 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 指南中描述的过程。重要的方法调用是第一个。方法头:

Executable Executables.Add(string moniker)

我从这个特定的页面得到了这个绰号。不幸的是,提供的列表不包含Execute T-SQL Statement Task的名字对象。我仍然相信必须以某种方式以编程方式创建此类任务。

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


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

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

1 回答 1

2

从您提到您从以下位置获得 Moniker 列表的页面:

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

  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);
于 2012-06-28T19:29:20.213 回答