支援自訂元件中的多目標
適用於:SQL Server Azure Data Factory 中的 SSIS Integration Runtime
您現在可以在 SQL Server Data Tools (SSDT) 中使用 SSIS 設計工具,來建立、維護和執行目標為 SQL Server 2016、SQL Server 2014 或 SQL Server 2012 的套件。 若要取得 SSDT for Visual Studio 2015,請參閱下載最新的 SQL Server Data Tools。
在方案總管中,在 Integration Services 專案上按一下滑鼠右鍵,然後選取 [屬性] 以開啟專案的屬性頁。 在 [設定屬性] 的 [一般] 索引標籤中,選取 [TargetServerVersion] 屬性,然後選擇 SQL Server 2016、SQL Server 2014 或 SQL Server 2012。
自訂元件的多版本支援和多目標
全五種 SSIS 自訂延伸模組支援多目標。
- 連接管理員
- 工作
- 列舉值
- 記錄提供者
- 資料流程元件
針對受控延伸模組,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)。
解決方案。 如果您的自訂延伸模組參考 SSIS interop 組件,例如 Microsoft.SqlServer.DTSPipelineWrap 或 Microsoft.SqlServer.DTSRuntimeWrap,請將 [內嵌 Interop 類型] 屬性的值設成 False。
當目標版本是 SQL Server 2012 時無法載入某些類型
此問題會影響某些類型,例如 IErrorReportingService 或 IUserPromptService。
錯誤訊息 (範例)。 無法從組件 'Microsoft.DataWarehouse, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' 載入類型 'Microsoft.DataWarehouse.Design.IErrorReportingService'。
因應措施。 當目標版本為 SQL Server 2012 時,請使用 MessageBox 而不是這些介面。