Pregunta

Estoy tratando de utilizar una tarea Ejecutar SQL en SSIS 2008 para asignar un parámetro de salida de proceso de almacenamiento a una variable de paquete.

La variable de paquete es SSIS tipo DateTime y el parámetro de proceso de almacenamiento es de tipo SQL DATETIME.

La instrucción SQL es EXEC GetCurrentDate @CurrentDate=? y en la pantalla de asignación de parámetros, el parámetro se asigna a la variable de paquete con la dirección de salida y tipo de datos DBTIMESTAMP especificado.

Al ejecutar el paquete me sale el siguiente error:

  

[Tarea de ejecución SQL] Error: Ejecución   la consulta "EXEC GetCurrentDate   @ CurrentDate =? "Fallado con el   error siguiente: "El tipo de la   valor que se asigna a la variable   "Usuario :: CurrentDate" difiere de la   Tipo de variable actual. Las variables pueden   No cambie el tipo durante la ejecución.   Los tipos de variables son estrictas, a excepción de   variables de tipo de objeto. ". Posible   razones de fracaso: Problemas con el   consulta, "ResultSet" no establece la propiedad   correctamente, no establecen parámetros   correctamente, o no conexión   establecida correctamente.

Si ejecuta un seguimiento en la consulta que se ejecuta veo está siendo asumido el tipo datetime2:

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

¿Alguien sabe por qué se está asumiendo el tipo es datetime2?

Gracias

¿Fue útil?

Solución

Se han encontrado la respuesta en un informe de error Micorsoft conexion:

  

Estamos cerrando este caso ya que este es el comportamiento esperado y es el resultado del nuevo cambio de fecha y hora tipo SQL. Está utilizando un administrador de conexión OLEDB nativo para la tarea SQL, en el proceso de interoperabilidad COM, utilizamos VARIANTE para mantener el valor y la única manera de prevenir la pérdida de datos es almacenar el valor como variante BSTR. Si cambia de usuario :: dateParam de tipo String que va a funcionar, o puede cambiar a utilizar el gestor de conexión administrada para eludir la interoperabilidad COM.

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

Otros consejos

Trate de especificar los parámetros inout / salida como DATE en lugar de DBTIMESTAMP en la tarea de SSIS.

Esto ciertamente funciona en SSIS 2005 paquetes que he trabajado.

También vale la pena echar un vistazo a este enlace , que cubre esto, así como un par de otros problemas con SSIS y fechas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top