我用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);
答案 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);