Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SSIS-Paket möchte keine Metadaten der temporären Tabelle abrufen

Verwendung von WITH RESULT SETS Wenn Sie die Metadaten explizit definieren, kann SSIS das sp_describe_first_result_set überspringen Schritt und verwenden Sie die von Ihnen definierten Metadaten. Der Vorteil ist, dass Sie dies verwenden können, um SSIS dazu zu bringen, SQL auszuführen, das eine temporäre Tabelle enthält (für mich hat diese Leistung sehr geholfen); Der Nachteil ist, dass Sie dies manuell pflegen und aktualisieren müssen, wenn sich etwas ändert.

Abfragebeispiel (gespeicherte Prozedur:)

    EXEC ('dbo.MyStoredProcedure')
    WITH RESULT SETS
      (
        (
            MyIntegerColumn INT NOT NULL,
            MyTextColumn VARCHAR(50) NULL,
            MyOtherColumn BIT NULL
        )
      )

Abfragebeispiel (einfaches SQL:)

EXEC ('
    CREATE TABLE #a 
      (
        MyIntegerColumn INT NOT NULL,
        MyTextColumn VARCHAR(50) NULL,
        MyOtherColumn BIT NULL
      ) 
    INSERT INTO #a 
      (
        MyIntegerColumn,
        MyTextColumn,
        MyOtherColumn
      )
    SELECT 
        1 AS MyIntegerColumn,
        ''x'' AS MyTextColumn,
        0 AS MyOtherColumn

    SELECT MyIntegerColumn, MyTextColumn, MyOtherColumn
    FROM #a')

WITH RESULT SETS
    (
        (
            MyIntegerColumn INT NOT NULL
           ,MyTextColumn VARCHAR(50) NULL
           ,MyOtherColumn BIT NULL
        )
    )