1

C#を使用してプログラムでSSISパッケージを作成しています。Visual Studio 2010を使用しており、SQLServer2012用に開発しています。

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)

この特定のページからモニカを取得しました。残念ながら、提供されているリストには、 T-SQLステートメントの実行タスクのモニカが含まれていません。プログラムでそのようなタスクを作成することは、どういうわけか可能でなければならないと私はまだ信じています。

誰かがこれを達成する方法を知っていますか?ありがとう!


William Todd Salzmanの回答のおかげで、次のコマンドを使用して上記のタスクを作成できました。

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

1 に答える 1

2

あなたがモニカーリストを入手したとあなたが言及したページから:

より明示的な構文が必要な場合、または追加するタスクに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 に答える