Maison >base de données >tutoriel mysql >Pourquoi mon package SSIS ne parvient-il pas à acquérir les métadonnées d'une table temporaire et comment puis-je y remédier à l'aide de « AVEC DES JEUX DE RÉSULTATS » ?

Pourquoi mon package SSIS ne parvient-il pas à acquérir les métadonnées d'une table temporaire et comment puis-je y remédier à l'aide de « AVEC DES JEUX DE RÉSULTATS » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-27 14:23:21603parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn