ホームページ >データベース >mysql チュートリアル >SSIS パッケージが一時テーブルのメタデータの取得に失敗するのはなぜですか? `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 サイトの他の関連記事を参照してください。