Timestamp in SSIS

martedì 18 novembre 2008 - 17.35

squilibrium Profilo | Junior Member

Ciao a tutti

Sto sviluppando un package che contiene, all'interno di un dataflow, uno script component che usa una variabile readwrite di tipo object.

in precedenza la variabile viene valorizzata recuperando (attraverso una select) il valore di un campo di tipo 'Timestamp'.

Nel dataflow in pratica io leggo i dati da una tabella che contiene anche essa dei campi di tipo timestamp e li passo allo script component

lo script elabora il flusso dati e confronta tali campi timestamp (che dal componente vengono visti come array di byte) con il valore della variabile readwrite e mi deve valorizzare poi tale variabile con il più grande di tutti loro

Il problema principale è che alla fine quando vado a scrivere su un'altra tabella (all'interno di un campo di tipo varbinary(8)) il valore della variabile, mi inserisce sempre '0x00' come se non fosse stata valorizzata mentre in realtà sono sicuro che lo è mandando in debug e usando la finestra 'locals' ho verificato.

Avete qualche informazione sul trattamento dei dati di tipo timestamp all'interno di un package???

alx_81 Profilo | Guru

>Ciao a tutti
Ciao!

>in precedenza la variabile viene valorizzata recuperando (attraverso
>una select) il valore di un campo di tipo 'Timestamp'.
devi usare per forza quel tipo?

>lo script elabora il flusso dati e confronta tali campi timestamp
>(che dal componente vengono visti come array di byte) con il
>valore della variabile readwrite e mi deve valorizzare poi tale
>variabile con il più grande di tutti loro
Ma è necessario usare uno script component per ottenere il massimo dei timestamp?
Non ti basta una MAX sul campo della tabella?

>Il problema principale è che alla fine quando vado a scrivere
>su un'altra tabella (all'interno di un campo di tipo varbinary(8))
>il valore della variabile, mi inserisce sempre '0x00' come se
>non fosse stata valorizzata mentre in realtà sono sicuro che
>lo è mandando in debug e usando la finestra 'locals' ho verificato.
E perchè cerchi di metterlo in un varbinary? Ma soprattutto perchè hai scelto il timestamp? Non era meglio un bel datetime?

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

squilibrium Profilo | Junior Member

In pratica io ho una vista su un database esterno dal quale mi importo i dati.
Tale vista ha 5 campi di tipo timestamp e io:

- Prendo tutti i record dove almeno uno dei 5 timestamp sia maggiore di un timestamp che tengo memorizzato.
- Mi copio i dati ai quali applico le mie trasformazioni
- Mi memorizzo il max timestamp (mi prendo il max tra tutti e 5 i campi e per tutti i record che ho importato)

Per memorizzare il timestamp massimo su una tabella, il tipo di dato deve essere varbinary o binary in quanto su un campo timestamp non si può scrivere.

Quando mi sono trovato a creare il task (Execute slq task) che doveva scrivere tale campo in tabella (una query del tipo

UPDATE TB_ELABORAZIONE SET MAX_TIMESTAMP = ?

), non sono riuscito ad assegnare il tipo giusto al parametro che avrebbe dovuto contenere il valore (memorizzato in una variabile globale di tipo object).

Alla fine ho risolto tutto ovviamente con SQL ma ho dovuto far modificare la vista di partenza per facilitarmi la vita....


Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5