SSIS-Paket blockiert den Erwerb von Metadaten für temporäre Tabellen
In einem SSIS-Paket erstellen mehrere Flüsse globale temporäre Tabellen als Stagingbereiche für Daten. Allerdings tritt bei einem Fluss ein zeitweiliger Fehler auf, wenn er versucht, Metadaten für seine temporäre Tabelle abzurufen. Die Fehlermeldung lautet:
Unspecified error. The metadata could not be determined because statement 'select * from '##TmpMcsConfigurationDeviceHistory86B34BFD041A430E84CCACE78DA336A1'' uses a temp table.
Der Erstellungsausdruck für die temporäre Tabelle lautet:
CREATE TABLE " + @[User::TmpMcsConfigurationDeviceHistory] + " ([RecId] [bigint] NULL,[DataAreaID] [nvarchar](4) COLLATE database_default NULL,[Asset] [bigint] NULL,[Code] [nvarchar](255) COLLATE database_default NULL,[Configuration] [bigint],[StartdateTime] [datetime] NULL,[EndDateTime] [datetime] NULL)
Ausgewertet wird dieser Ausdruck zu:
CREATE TABLE ##TmpMcsConfigurationDeviceHistory764E56F088DC475C9CC747CC82B9E388 ([RecId] [bigint] NULL,[DataAreaID] [nvarchar](4) COLLATE database_default NULL,[Asset] [bigint] NULL,[Code] [nvarchar](255) COLLATE database_default NULL,[Configuration] [bigint],[StartdateTime] [datetime] NULL,[EndDateTime] [datetime] NULL)
Lösung
Um dieses Problem zu beheben, sollten Sie die Verwendung von WITH RESULT SETS in Betracht ziehen, um die Metadaten für das Temporäre explizit zu definieren Tisch. Dadurch kann SSIS den Schritt sp_describe_first_result_set umgehen und die bereitgestellten Metadaten verwenden.
Implementierung
Für gespeicherte Prozeduren verwenden Sie die folgende Syntax:
EXEC ('dbo.MyStoredProcedure') WITH RESULT SETS ( ( MyIntegerColumn INT NOT NULL, MyTextColumn VARCHAR(50) NULL, MyOtherColumn BIT NULL ) )
Für einfache SQL-Abfragen verwenden Sie die folgende Syntax:
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 ) )
Das obige ist der detaillierte Inhalt vonWarum kann mein SSIS-Paket keine Metadaten für eine temporäre Tabelle abrufen und wie kann ich das Problem mit „WITH RESULT SETS' beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!