Rumah >pangkalan data >tutorial mysql >Mengapa Pakej SSIS Saya Gagal Memperoleh Metadata untuk Jadual Sementara, dan Bagaimana Saya Boleh Membetulkannya Menggunakan `WITH RESULT SETS`?

Mengapa Pakej SSIS Saya Gagal Memperoleh Metadata untuk Jadual Sementara, dan Bagaimana Saya Boleh Membetulkannya Menggunakan `WITH RESULT SETS`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 14:23:21562semak imbas

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

Gerai Pakej SSIS Memperoleh Metadata untuk Jadual Sementara

Dalam pakej SSIS, berbilang aliran mencipta jadual sementara global sebagai kawasan pementasan untuk data. Walau bagaimanapun, satu aliran mengalami kegagalan sekejap apabila cuba mengambil metadata untuk jadual sementaranya. Mesej ralat berbunyi:

Unspecified error. The metadata could not be determined because statement 'select * from '##TmpMcsConfigurationDeviceHistory86B34BFD041A430E84CCACE78DA336A1'' uses a temp table.

Ungkapan penciptaan untuk jadual sementara ialah:

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)

Dinilai, ungkapan ini menjadi:

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)

Penyelesaian

Untuk menyelesaikan isu ini, pertimbangkan untuk menggunakan WITH RESULT SETS untuk secara eksplisit tentukan metadata untuk jadual sementara. Ini membolehkan SSIS memintas langkah sp_describe_first_result_set dan menggunakan metadata yang disediakan.

Pelaksanaan

Untuk prosedur tersimpan, gunakan sintaks berikut:

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

Untuk pertanyaan SQL mudah, gunakan sintaks berikut:

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
        )
    )

Atas ialah kandungan terperinci Mengapa Pakej SSIS Saya Gagal Memperoleh Metadata untuk Jadual Sementara, dan Bagaimana Saya Boleh Membetulkannya Menggunakan `WITH RESULT SETS`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn