2010-08-19 5 views
1

J'importe des données Oracle dans SQL Server. Après mon source OLE DB qui exécute une requête pour récupérer les données à traiter, j'essaie d'appeler une fonction TSQL sur une valeur de champ en quelque sorte ...SSIS OLE utilisant DBCommand pour appeler la fonction tsql

J'ai un flux de données SSIS où j'ai une colonne datetime appelée DepartureDateGMT et une colonne entière appelée DepartureTimeZoneKey.

J'ai une TSQL fonction appelée dbo.udf_ConvertFromGMT (,) qui retourne un datetime

Je suis en train de créer une commande OLE DB qui remplit une colonne appelée DepartureDate qui contient la valeur de l'appel:

dbo.udf_ConvertFromGMT (DepartureDateGMT, DepartureTimezoneKey)

pour chaque ligne du flux de données SSIS.

Je ne suis pas mise à jour/insertion dans une table existante, je suis juste essayer de stocker le résultat dans la colonne DepartureDate de chaque ligne de l'ensemble de données de flux de données

J'ai essayé beaucoup de choses, comme

Exec? dbo.udf_ConvertFromGMT (?,?)

SELECT dbo.udf_ConvertFromGMT (DepartureDateGMT, DepartureTimezoneKey)

dbo.udf_ConvertFromGMT (?,?)

DECLARE @Result DATETIME SET @Result = dbo.udf_ConvertFromGMT (?,)

Mais je reçois: erreur de syntaxe, la violation d'autorisation ou d'une autre erreur non spécifique

suis-je aboiements le mauvais arbre? J'ai essayé d'utiliser DerivedColumn, mais cela ne permet pas d'appeler une fonction TSQL.

Merci!

Répondre

1

La commande OLE DB dans une tâche de flux de données est conçue pour exécuter une instruction SQL une fois pour chaque ligne du flux de données. Que cela fonctionne pour vous ou non, vous pouvez ne pas être satisfait de la performance s'il y a beaucoup de lignes à traiter. Avez-vous regardé dans le langage d'expression SSIS pour voir si vous pouvez déplacer la fonctionnalité, au lieu de l'appel de la fonction, dans un composant colonne dérivé?

Si vous devez utiliser la commande OLE DB, vous pouvez essayer de remplacer votre fonction SQL par une procédure stockée SQL. Dans la commande OLE DB, vous pouvez appeler une procédure comme celui-ci

EXEC dbo.usp_ConvertFromGMT ?, ?, ? OUTPUT 

Je pense que vous pouvez mapper votre résultat comme paramètre de sortie (3? Dans la commande) à une colonne de flux de données.

+0

Merci bob - une fois que je l'ai changé d'une fonction à un sp, cela a fonctionné comme un charme! –

Questions connexes