カスタム コンポーネントの複数バージョン対応のサポート

適用対象:SQL Server Azure Data Factory の SSIS Integration Runtime

SQL Server Data Tools (SSDT) で SSIS デザイナーを使用して、SQL Server 2016、SQL Server 2014、または SQL Server 2012 をターゲットとするパッケージを作成、管理、および実行できるようになりました。 Visual Studio 2015 用の SSDT を入手する方法については、「最新の SQL Server Data Tools のダウンロード」を参照してください。

ソリューション エクスプローラーで Integration Services プロジェクトを右クリックし、 [プロパティ] を選択すると、そのプロジェクトのプロパティ ページが開きます。 [構成プロパティ][全般] タブで、[TargetServerVersion] プロパティを選択した後、[SQL Server 2016]、[SQL Server 2014]、または [SQL Server 2012] を選択します。

[プロジェクトのプロパティ] ダイアログ ボックスの TargetServerVersion プロパティ

複数バージョンのサポートとカスタム コンポーネントの複数バージョン対応

SSIS カスタム拡張機能の 5 種類すべてで、複数バージョン対応がサポートされています。

  • 接続マネージャー
  • タスク
  • 列挙子
  • ログ プロバイダー
  • データ フロー コンポーネント

マネージド拡張機能の場合、SSIS デザイナーが、指定されたターゲット バージョンの拡張機能のバージョンを読み込みます。 次に例を示します。

  • 対応バージョンが SQL Server 2012 の場合、デザイナーは、拡張機能の2012 バージョンを読み込みます。
  • 対応バージョンが SQL Server 2016 の場合、デザイナーは、拡張機能の2016 バージョンを読み込みます。

COM 拡張機能は、複数バージョン対応はサポートしていません。 SSIS デザイナーは、指定した対応バージョンに関係なく、常に現在のバージョンの SQL Server の COM の拡張機能を読み込みます。

複数バージョンおよび複数バージョン対応の基本サポートの追加

基本的なガイダンスについては、「Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016」 (SQL Server 2016 用 SSDT 2015 の複数バージョン サポートで SSIS カスタム拡張機能がサポートされるようにする) を参照してください。 このブログ投稿では、次の手順や要件について説明しています。

  • 適切なフォルダーへのアセンブリの展開。

  • SQL Server 2014 以上のバージョン用の拡張マップ ファイルの作成。

バージョンを切り替えるためのコードの追加

カスタム接続マネージャー、タスク、列挙子、またはログ プロバイダーのバージョンを切り替える

カスタム接続マネージャー、タスク、列挙子、またはログ プロバイダーには、SaveToXML メソッドにダウングレード ロジックを追加します。

public void SaveToXML(XmlDocument doc, IDTSInfoEvents events)
{
    if (TargetServerVersion == DTSTargetServerVersion.SQLServer2014)
    {
        // Add logic to downgrade from SQL Server 2016 to SQL Server 2014.
    }

    if (TargetServerVersion == DTSTargetServerVersion.SQLServer2012)
    {
         // Add logic to downgrade from SQL Server 2016 to SQL Server 2012.
    }
}

カスタム データ フロー コンポーネントでのバージョンの切り替え

カスタム接続マネージャー、タスク、列挙子、またはログ プロバイダーには、新しい PerformDowngrade メソッドにダウングレード ロジックを追加します。

public override void PerformDowngrade(int pipelineVersion, DTSTargetServerVersion targetServerVersion)
{
    if (targetServerVersion == DTSTargetServerVersion.DTSTSV_SQLSERVER2014)
    {
        // Add logic to downgrade from SQL Server 2016 to SQL Server 2014.
        ComponentMetaData.Version = 8;
    }

    if (targetServerVersion == DTSTargetServerVersion.DTSTSV_SQLSERVER2012)
    {
          // Add logic to downgrade from SQL Server 2016 to SQL Server 2012.
        ComponentMetaData.Version = 6;
    }
}

一般的なエラー

InvalidCastException

エラー メッセージ。 型 'System.__ComObject' の COM オブジェクトをインターフェイス型 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100' にキャストできません。 IID '{BE8C48A3-155B-4810-BA5C-BDF68A659E9E}' が指定されたインターフェイスの COM コンポーネント上での QueryInterface 呼び出しのときに次のエラーが発生したため、この操作に失敗しました: インターフェイスがサポートされていません。(HRESULT からの例外: 0x80004002 (E_NOINTERFACE))。 (Microsoft.SqlServer.DTSPipelineWrap)。

解決方法。 カスタム拡張機能が、Microsoft.SqlServer.DTSPipelineWrap や Microsoft.SqlServer.DTSRuntimeWrap などの SSIS 相互運用機能アセンブリを参照する場合、[相互運用機能型の埋め込み] プロパティの値を False に設定します。

相互運用機能型の埋め込み

対応バージョンが SQL Server 2012 の場合、一部の型を読み込めない

この問題は、IErrorReportingService や IUserPromptService などの特定の型に影響します。

エラー メッセージ (例)。 アセンブリ 'Microsoft.DataWarehouse, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' から型 'Microsoft.DataWarehouse.Design.IErrorReportingService' を読み込めませんでした。

回避策。 対応バージョンが SQL Server 2012 の場合、これらのインターフェイスではなく、メッセージ ボックスを使用してください。