スクリプト タスクのコーディングおよびデバッグ

[スクリプト タスク エディタ] でスクリプト タスクを構成したら、スクリプト タスク開発環境でカスタム コードを記述します。

スクリプト タスク開発環境

スクリプト タスクは、スクリプト自体の開発環境として、MicrosoftVisual Studio Tools for Applications (VSTA) を使用します。

スクリプト コードは、MicrosoftVisual Basic 2008 または MicrosoftVisual C# 2008 で記述されます。スクリプト言語を指定するには、[スクリプト タスク エディタ][ScriptLanguage] プロパティを設定します。その他のプログラミング言語を使用する場合は、選択した言語でカスタム アセンブリを作成し、スクリプト タスク内のコードからその機能を呼び出すことができます。

スクリプト タスクで作成したスクリプトは、パッケージ定義に格納されます。スクリプト ファイルが別途存在するわけではありません。したがって、スクリプト タスクを使用してもパッケージの配置には影響しません。

注意注意

パッケージをデザインしてスクリプトをデバッグする際、スクリプト コードは一時的にプロジェクト ファイルに書き込まれます。機密情報をファイルに保存することはセキュリティ上危険であるため、パスワードなどの重要な情報はスクリプト コードに書き込まないことをお勧めします。

既定では、Option Strict が IDE で無効になっています。

スクリプト タスク プロジェクトの構造

スクリプト タスクに格納されているスクリプトを作成または変更する場合、VSTA は空の新しいプロジェクトを開くか、または既存のプロジェクトを再度開きます。この VSTA プロジェクトを作成しても、パッケージの配置に影響はありません。このプロジェクトはパッケージ ファイル内部に保存され、スクリプト タスクは追加ファイルを作成しないためです。

スクリプト タスク プロジェクトのプロジェクト アイテムおよびクラス

VSTA の [プロジェクト エクスプローラ] ウィンドウに表示されるスクリプト タスク プロジェクトには、既定で ScriptMain という単一のアイテムが格納されます。ScriptMain アイテムには、同じく ScriptMain という名前の単一のクラスが格納されます。このクラスのコード要素は、スクリプト タスクに対して選択したプログラミング言語に応じて異なります。

  • スクリプト タスクが Visual Basic 2008 プログラミング言語用に構成されている場合は、ScriptMain クラスにパブリック サブルーチン Main が含まれます。ScriptMain.Main サブルーチンは、ユーザーのスクリプト タスクを実行するときにランタイムが呼び出すメソッドです。

    既定では、新しいスクリプトの Main サブルーチン内にあるコードは、行 Dts.TaskResult = ScriptResults.Success のみです。この行は、タスクの処理が正常に実行されたことをランタイムに通知します。Dts.TaskResult プロパティについては、「スクリプト タスクから結果を返す」で説明します。

  • スクリプト タスクが Visual C# 2008 プログラミング言語用に構成されている場合は、ScriptMain クラスにパブリック メソッド Main が含まれます。このメソッドは、スクリプト タスク実行時に呼び出されます。

    既定では、Main メソッドに Dts.TaskResult = (int)ScriptResults.Success という行が含まれます。この行は、タスクの処理が正常に実行されたことをランタイムに通知します。

ScriptMain アイテムには、ScriptMain クラス以外のクラスを格納できます。クラスは、そのクラスが含まれているスクリプト タスクでのみ使用できます。

既定では、ScriptMain プロジェクト アイテムには、次のコードが自動生成されます。

' Microsoft SQL Server Integration Services Script Task
' Write scripts using Microsoft Visual Basic 2008.
' The ScriptMain is the entry point class of the script.

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime.VSTAProxy

<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
Partial Class ScriptMain

Private Sub ScriptMain_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup

End Sub

Private Sub ScriptMain_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
Try
' Unlock variables from the read-only and read-write variable collection properties
If (Dts.Variables.Count <> 0) Then
Dts.Variables.Unlock()
End If
Catch ex As Exception
        End Try
End Sub

Enum ScriptResults
Success = DTSExecResult.Success
Failure = DTSExecResult.Failure
End Enum


' The execution engine calls this method when the task executes.
' To access the object model, use the Dts property. Connections, variables, events,
' and logging features are available as members of the Dts property as shown in the following examples.
'
' To reference a variable, call Dts.Variables("MyCaseSensitiveVariableName").Value
' To post a log entry, call Dts.Log("This is my log text", 999, Nothing)
' To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, True)
'
' To use the connections collection use something like the following:
' ConnectionManager cm = Dts.Connections.Add("OLEDB")
' cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;"
'
' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
' 
' To open Help, press F1.

Public Sub Main()
'
' Add your code here
'
Dts.TaskResult = ScriptResults.Success
End Sub

End Class
/*
   Microsoft SQL Server Integration Services Script Task
   Write scripts using Microsoft Visual C# 2008.
   The ScriptMain is the entry point class of the script.
*/

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime.VSTAProxy;
using System.Windows.Forms;

namespace ST_1bcfdbad36d94f8ba9f23a10375abe53.csproj
{
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
    public partial class ScriptMain
    {
        private void ScriptMain_Startup(object sender, EventArgs e)
        {

        }

        private void ScriptMain_Shutdown(object sender, EventArgs e)
        {
            try
            {
                // Unlock variables from the read-only and read-write variable collection properties
                if (Dts.Variables.Count != 0)
                {
                    Dts.Variables.Unlock();
                }
            }
            catch
            {
            }
        }

        #region VSTA generated code
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ScriptMain_Startup);
            this.Shutdown += new System.EventHandler(ScriptMain_Shutdown);
        }
        enum ScriptResults
        {
            Success = DTSExecResult.Success,
            Failure = DTSExecResult.Failure
        };

        #endregion

        /*
The execution engine calls this method when the task executes.
To access the object model, use the Dts property. Connections, variables, events,
and logging features are available as members of the Dts property as shown in the following examples.

To reference a variable, call Dts.Variables["MyCaseSensitiveVariableName"].Value;
To post a log entry, call Dts.Log("This is my log text", 999, null);
To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, true);

To use the connections collection use something like the following:
ConnectionManager cm = Dts.Connections.Add("OLEDB");
cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;";

Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.

To open Help, press F1.
*/

        public void Main()
        {
            // TODO: Add your code here
            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }

スクリプト タスク プロジェクトのその他のプロジェクト アイテム

スクリプト タスク プロジェクトには、既定の ScriptMain アイテム以外のアイテムを格納できます。プロジェクトには、クラス、モジュール、およびコード ファイルを追加できます。また、フォルダを使用してアイテムのグループを整理できます。追加したすべてのアイテムは、パッケージ内部に保存されます。

スクリプト タスク プロジェクトの参照

参照をマネージ アセンブリに追加するには、[プロジェクト エクスプローラ] でスクリプト タスク プロジェクトを右クリックし、[参照の追加] をクリックします。詳細については、「スクリプティング ソリューションでの他のアセンブリの参照」を参照してください。

注意注意

プロジェクト参照は、VSTA IDE の [クラス ビュー] または [プロジェクト エクスプローラ] で表示できます。どちらのウィンドウも [表示] メニューから開きます。新しい参照は、[プロジェクト] メニュー、[プロジェクト エクスプローラ]、または [クラス ビュー] から追加できます。

スクリプト タスク内でのパッケージとの対話

スクリプト タスクは、ScriptObjectModel クラスのインスタンスであるグローバル オブジェクト Dts、およびそのメンバを使用して、内部のパッケージや Integration Services ランタイムとやり取りします。

次の表は、ScriptObjectModel クラスのプリンシパルのパブリック メンバの一覧です。このクラスは、グローバル オブジェクト Dts を介してスクリプト タスクのコードに公開されます。このセクションのトピックでは、これらのメンバを使用する方法についてさらに詳しく説明します。

メンバ

目的

Connections

パッケージで定義されている接続マネージャへのアクセスを提供します。

Events

スクリプト タスクでエラー、警告、および情報メッセージを発生させるためのイベント インターフェイスを提供します。

ExecutionValue

TaskResult のほか、ワークフローの分岐にも使用できる単一のオブジェクトをランタイムに返す簡単な方法を提供します。

Log

タスクの進行状況や結果などの情報を、有効なログ プロバイダに記録します。

TaskResult

タスクの成功または失敗をレポートします。

Transaction

タスクのコンテナを実行しているトランザクションが存在する場合、それを提供します。

Variables

スクリプトで使用するため、ReadOnlyVariables および ReadWriteVariables タスク プロパティの一覧に含まれる変数へのアクセスを提供します。

ScriptObjectModel クラスには、使用しない可能性のあるパブリック メンバも含まれています。

メンバ

説明

VariableDispenser

変数にアクセスするには、Variables プロパティの方が便利です。VariableDispenser も使用できますが、読み書きする変数をロックおよびロック解除するためのメソッドを明示的に呼び出す必要があります。Variables プロパティを使用すると、スクリプト タスクにより自動的にロック セマンティクスが処理されます。

スクリプト タスクのデバッグ

スクリプト タスクのコードをデバッグするには、コードに少なくとも 1 つのブレークポイントを設定し、VSTA IDE を閉じて Business Intelligence Development Studio でパッケージを実行します。パッケージが実行されてスクリプト タスクが開始されると、VSTA IDE が再度開き、読み取り専用モードでコードが表示されます。実行によりブレークポイントに到達したら、変数の値の検証や、残りのコードのステップ スルーができます。

注意注意

スクリプト タスクをデバッグするには、パッケージを実行する必要があります。個別のタスクのみを実行する場合、スクリプト タスク コードのブレークポイントは無視されます。

注意注意

パッケージ実行タスクから実行されている子パッケージの一部としてスクリプト タスクを実行する場合は、スクリプト タスクをデバッグできません。このような場合は、子パッケージのスクリプト タスク内で設定したブレークポイントは無視されます。子パッケージを単独で実行することにより、通常どおりパッケージをデバッグできます。

注意注意

複数のスクリプト タスクを含むパッケージをデバッグする場合、デバッガは 1 つのスクリプト タスクにあるブレークポイントのみにヒットし、他のスクリプト タスクにあるブレークポイントを無視します。スクリプト タスクが Foreach ループ コンテナまたは For ループ コンテナの一部である場合は、そのループの最初の反復処理を実行した後、スクリプト タスクのブレークポイントはすべて無視されます。

Integration Services のアイコン (小) 最新の Integration Services の入手

マイクロソフトが提供する最新のダウンロード、アーティクル、サンプル、ビデオ、およびコミュニティで選択されたソリューションについては、MSDN または TechNet の Integration Services のページを参照してください。

これらの更新が自動で通知されるようにするには、ページの RSS フィードを購読します。