2009-05-18 15 views
3

J'essaie d'utiliser une tâche SQL d'exécution dans SSIS 2008 pour mapper un paramètre de sortie de procédure de magasin à une variable de package.SSIS 2008 Problème de datetime2 de mappage des paramètres de sortie d'exécution SQL

La variable de package est de type SSIS DateTime et le paramètre de procédure de stockage est de type SQL DATETIME. L'instruction SQL est EXEC GetCurrentDate @CurrentDate=? et dans l'écran de mappage de paramètres, le paramètre est mappé à la variable de package avec la direction Sortie et type de données DBTIMESTAMP spécifiés.

Quand je lance le paquet que je reçois l'erreur suivante:

[Execute SQL Task] Error: Executing the query "EXEC GetCurrentDate @CurrentDate=? " failed with the following error: "The type of the value being assigned to variable "User::CurrentDate" differs from the current variable type. Variables may not change type during execution. Variable types are strict, except for variables of type Object. ". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

Si je lance une trace sur la requête en cours d'exécution, je vois le type est supposé que datetime2:

declare @p3 datetime2(7) 
set @p3=NULL 
exec sp_executesql N'EXEC GetCurrentDate @[email protected] ',N'@P1 datetime2(7) OUTPUT',@p3 output 
select @p3 

Est-ce quelqu'un sait pourquoi il suppose que le type est datetime2?

Merci

Répondre

3

a trouvé la réponse sur un Micorsoft Connect rapport de bogue:

We are closing this case as this is expected behaviour and is a result of the new sql datetime type change. You are using a native oledb connection manager for sql task, in the process of COM interop, we use VARIANT to hold the value and the only way to prevent data loss is to store the value as BSTR variant. If you change User::dateParam to String type it will work, or you can switch to use managed connection manager to bypass the COM interop.

http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=307835

0

Essayez spécifier les paramètres inout/sortie comme DATE plutôt que DBTIMESTAMP dans la tâche SSIS.

Cela fonctionne certainement dans les packages SSIS 2005 sur lesquels j'ai travaillé.

Il est également intéressant de jeter un coup d'œil à this link, qui couvre ce problème ainsi que quelques autres problèmes avec SSIS et dates.