Heim > Datenbank > MySQL-Tutorial > Warum kann mein SSIS-Paket keine Metadaten für eine temporäre Tabelle abrufen und wie kann ich das Problem mit „WITH RESULT SETS' beheben?

Warum kann mein SSIS-Paket keine Metadaten für eine temporäre Tabelle abrufen und wie kann ich das Problem mit „WITH RESULT SETS' beheben?

Mary-Kate Olsen
Freigeben: 2024-12-27 14:23:21
Original
566 Leute haben es durchsucht

Why Does My SSIS Package Fail to Acquire Metadata for a Temporary Table, and How Can I Fix It Using `WITH RESULT SETS`?

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.
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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
    )
  )
Nach dem Login kopieren

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
        )
    )
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage