ホームページ >データベース >mysql チュートリアル >SSIS パッケージが一時テーブルのメタデータの取得に失敗するのはなぜですか? `WITH RESULT SETS` を使用して修正するにはどうすればよいですか?

SSIS パッケージが一時テーブルのメタデータの取得に失敗するのはなぜですか? `WITH RESULT SETS` を使用して修正するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 14:23:21563ブラウズ

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

一時テーブルのメタデータの取得中に SSIS パッケージが停止する

SSIS パッケージでは、複数のフローがデータのステージング領域としてグローバル一時テーブルを作成します。ただし、1 つのフローで、一時テーブルのメタデータをフェッチしようとすると、断続的なエラーが発生します。エラー メッセージは次のとおりです:

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

一時テーブルの作成式は次のとおりです:

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)

評価されると、この式は次のようになります:

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)

解決策

この問題を解決するには、WITH RESULT の使用を検討してください。 SETS を使用して、一時テーブルのメタデータを明示的に定義します。これにより、SSIS は sp_describe_first_result_set ステップをバイパスし、提供されたメタデータを使用できるようになります。

実装

ストアド プロシージャの場合は、次の構文を使用します。

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

単純な 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
        )
    )

以上がSSIS パッケージが一時テーブルのメタデータの取得に失敗するのはなぜですか? `WITH RESULT SETS` を使用して修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。