Domanda

Sto cercando di utilizzare un'attività Esegui SQL in SSIS 2008 per mappare un parametro di output procedura di memorizzazione a una variabile del pacchetto.

La variabile pacchetto SSIS tipo DateTime e il parametro procedura negozio è di tipo SQL DATETIME.

L'istruzione SQL è EXEC GetCurrentDate @CurrentDate=? e nella schermata dei parametri di mappatura, il parametro viene mappato alla variabile pacchetto con direzione di uscita e Tipo di dati DBTIMESTAMP specificato.

Quando eseguo il pacchetto ottengo il seguente errore:

  

[Esegui SQL] Errore: esecuzione   la query "EXEC GetCurrentDate   @ CurrentDate =? "Non riuscita con il   seguente errore: "Il tipo di   valore assegnato alla variabile   "Utente :: DataCorrente" differisce dalla   corrente tipo variabile. Le variabili possono   Non cambiare tipo durante l'esecuzione.   Tipi di variabili sono severe, ad eccezione di   le variabili di tipo Object. ". Possibile   motivi di guasto: Problemi con il   interrogazione, "ResultSet" proprietà non impostato   correttamente, parametri non impostati   correttamente o non collegamento   stabilito in modo corretto.

Se eseguo una traccia sulla query in esecuzione vedo il tipo viene assunta come 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

Qualcuno sa il motivo per cui sta assumendo il tipo è datetime2?

Grazie

È stato utile?

Soluzione

Trovato la risposta su un bug report Micorsoft Connect:

  

Stiamo chiudendo questo caso in quanto questo è il comportamento previsto ed è il risultato del nuovo cambiamento di tipo datetime di SQL. Si utilizza una gestione connessione OLE DB nativo per SQL compito, nel processo di interoperabilità COM, usiamo VARIANT che contiene il valore e l'unico modo per prevenire la perdita di dati è quello di memorizzare il valore come BSTR variante. Se si modifica l'utente :: dateParam di tipo String che funzionerà, oppure si può passare a utilizzare gestione connessione riuscito a bypassare l'interoperabilità COM.

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

Altri suggerimenti

Prova a specificare i parametri inout / uscita come DATE piuttosto che DBTIMESTAMP nel compito SSIS.

Questo funziona sicuramente in SSIS 2005 pacchetti ho lavorato.

E 'anche la pena dare un'occhiata a questo link , che copre questo così come un paio di altri problemi con SSIS e le date.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top