Comme la plupart d'entre vous le savez, SSIS a du mal à lire les métadonnées chaque fois qu'une procédure stockée avec des tables temporaires est utilisée comme OleDbSource. Auparavant, cela pouvait être facilement évité en ajoutant SET FMTONLY OFF; avant la déclaration de l'EXEC. L'inconvénient de ceci est que la procédure stockée est exécutée pendant la validation et cela peut prendre un certain temps. Depuis SQL 2012, nous pouvons utiliser WITH RESULT SETS pour spécifier les colonnes et leurs types de données. SSIS va le ramasser et tout va bien en SQL.Génération de packages SSIS avec BIML utilisant des procédures stockées avec des tables temporaires
Toutefois, je souhaite générer un package avec BIML qui utilise une telle procédure stockée en tant que source et je n'arrive pas à le faire fonctionner. Supposons que j'ai une procédure stockée appelée 'dbo.csp_MyCsp' qui utilise une table temporaire appelée '#MyTempTable' avec 1 colonne 'ColA int'. Je suis en train de générer un OleDbSource avec les éléments suivants (similaires) Code BIML:
<OleDbSource ConnectionName="MyConnection" Name="OLE_SRC Test">
<DirectInput>
EXEC dbo.csp_MyCsp
WITH RESULT SETS
(
([Col1] int)
)
</DirectInput>
</OleDbSource>
Je reçois une erreur qui dit « #MyTempTable objet non valide ». La chose étrange est, si j'ouvre un paquet et que je colle dans ce code dans mon OleDbSource, cela fonctionne sans aucune erreur. J'ai l'intuition que l'étape de validation de SSIS et BIML est différente.
L'un de vous a-t-il une solution appropriée? Je ne peux pas utiliser FMTONLY OFF, car les procédures stockées prennent du temps à charger, ce qui entraîne un délai d'attente de génération. J'utilise SQL Server/SSIS 2014.
Merci d'avance!
Marvin
Avez-vous essayé d'autres moyens en dehors des tables temporaires, telles que les tables temporaires globales ou les variables de table? Est-il possible de créer simplement la table temporaire en tant que table normale dans un environnement intermédiaire? – iamdave
Je l'ai considéré, mais ce n'est pas vraiment une option. J'essaie de charger une table de faits (complexe) qui nécessite des étapes intermédiaires (tables temporaires) pour bien fonctionner. La création de tables temporaires persistantes ne correspond pas à l'architecture et ne devrait pas être nécessaire car une chose étrange est, la requête fonctionne quand je la colle dans une source OLE_DB, elle ne fonctionne tout simplement pas lorsque j'essaie de la générer. Je pense que c'est une chose de validation BIML.Peut-être que le moteur utilise encore la validation SSIS2008 ou quelque chose comme ça. À partir de 2012, les SET RESULT devraient fonctionner parfaitement –
J'ai ajouté SET FMTONLY OFF à ma procédure stockée avec un cte. qui est appelée avec la syntaxe des ensembles de résultats. – Doc