Supportare più destinazioni in componenti personalizzati

Si applica a:SQL Server SSIS Integration Runtime in Azure Data Factory

È ora possibile usare Progettazione SSIS in SQL Server Data Tools (SSDT) per creare, gestire ed eseguire pacchetti destinati a SQL Server 2016, SQL Server 2014 o SQL Server 2012. Per ottenere SSDT per Visual Studio 2015, vedere Scaricare la versione più recente di SQL Server Data Tools.

In Esplora soluzioni fare clic con il pulsante destro del mouse su un progetto di Integration Services e scegliere Proprietà per aprire le pagine delle proprietà per il progetto. Nella scheda Generale di Proprietà di configurazione, selezionare la proprietà TargetServerVersion, quindi scegliere SQL Server 2016, SQL Server 2014 o SQL Server 2012.

TargetServerVersion property in project properties dialog box

Supporto di più versioni e destinazioni per i componenti personalizzati

Tutti e cinque i tipi di estensioni personalizzate di SSIS supportano più destinazioni.

  • Connection managers
  • Attività
  • Enumeratori
  • Provider di log
  • Componenti del flusso di dati

Per le estensioni gestite, la finestra di progettazione SSIS carica la versione dell'estensione per la versione di destinazione specificata. Ad esempio:

  • Quando la versione di destinazione è SQL Server 2012, la finestra di progettazione carica la versione 2012 dell'estensione.
  • Quando la versione di destinazione è SQL Server 2016, la finestra di progettazione carica la versione 2016 dell'estensione.

Le estensioni COM non supportano più destinazioni. La finestra di progettazione SSIS carica sempre l'estensione COM per la versione corrente di SQL Server, indipendentemente dalla versione di destinazione specificata.

Aggiungere il supporto di base per più versioni e destinazioni

Per linee guida di base, vedere Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016 (Ottenere estensioni SSIS personalizzate supportate da più versioni di SSDT 2015 per SQL Server 2016). In questo post di blog vengono descritti i passaggi o requisiti seguenti.

  • Distribuire gli assembly nelle cartelle appropriate.

  • Creare un file di mapping delle estensioni per SQL Server 2014 e versioni successive.

Aggiungere il codice per passare da una versione all'altra

Passare da una versione all'altra in una gestione connessione, attività, enumeratore o provider di log personalizzati

Per una gestione connessione, attività, enumeratore o provider di log personalizzati, aggiungere logica di downgrade nel metodo 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.
    }
}

Passare da una versione all'altra in un componente flusso di dati personalizzato

Per una gestione connessione, attività, enumeratore o provider di log personalizzati, aggiungere logica di downgrade nel nuovo metodo 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;
    }
}

Errori comuni

InvalidCastException

Messaggio di errore. Impossibile eseguire il cast dell'oggetto COM di tipo 'System.__ComObject' al tipo di interfaccia 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100'. Questa operazione non è riuscita perché la chiamata QueryInterface sul componente COM per l'interfaccia con IID '{BE8C48A3-155B-4810-BA5C-BDF68A659E9E}' non è riuscita a causa dell'errore seguente: interfaccia non supportata (eccezione da HRESULT: 0x80004002 (E_NOINTERFACE)). (Microsoft.SqlServer.DTSPipelineWrap).

Soluzione. Se l'estensione personalizzata fa riferimento ad assembly di interoperabilità di SSIS, ad esempio Microsoft.SqlServer.DTSPipelineWrap o Microsoft.SqlServer.DTSRuntimeWrap, impostare il valore della proprietà Incorpora tipi di interoperabilità su False.

Embed Interop Types

Impossibile caricare alcuni tipi quando la versione di destinazione è SQL Server 2012

Questo problema interessa determinati tipi, ad esempio IErrorReportingService o IUserPromptService.

Messaggio di errore (esempio). Impossibile caricare il tipo 'Microsoft.DataWarehouse.Design.IErrorReportingService' dall'assembly 'Microsoft.DataWarehouse, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'.

Soluzione alternativa. Usare un elemento MessageBox anziché queste interfacce quando la versione di destinazione è SQL Server 2012.