Le package SSIS bloque l'acquisition de métadonnées pour une table temporaire
Dans un package SSIS, plusieurs flux créent des tables temporaires globales en tant que zones de transit pour les données. Cependant, un flux rencontre un échec intermittent lors de la tentative de récupération des métadonnées de sa table temporaire. Le message d'erreur se lit comme suit :
Unspecified error. The metadata could not be determined because statement 'select * from '##TmpMcsConfigurationDeviceHistory86B34BFD041A430E84CCACE78DA336A1'' uses a temp table.
L'expression de création de la table temporaire est :
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)
Évaluée, cette expression devient :
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)
Solution
Pour résoudre ce problème, envisagez d'utiliser WITH RESULT SETS pour définir explicitement les métadonnées du temporaire tableau. Cela permet à SSIS de contourner l'étape sp_describe_first_result_set et d'utiliser les métadonnées fournies.
Implémentation
Pour les procédures stockées, utilisez la syntaxe suivante :
EXEC ('dbo.MyStoredProcedure') WITH RESULT SETS ( ( MyIntegerColumn INT NOT NULL, MyTextColumn VARCHAR(50) NULL, MyOtherColumn BIT NULL ) )
Pour les requêtes SQL simples, utilisez la syntaxe suivante :
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 ) )
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!