Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Integration Services: da Data/Ora di Access a datetime di SQL Server 2005

Martedì stavo lavorando con il nuovo SQL Server 2005 e ho riscontrato questo problema che voglio documentare sul blog perchè magari potrà essere di aiuto a qualcuno.

Lo scenario è questo. Immaginate di avere un database Access (prova.mdb) con una sola tabella (Input) con un solo campo (DataServizio) di tipo Data/Ora. Popolate la tabella a mano con un po' di valori a caso, ottenendo ad esempio:

Ok, fin qua nulla di particolarmente complicato. Sperando che non siate inorriditi dalo screenshot di Access 2003 qui sopra, vado avanti con il mio discorso.  Adesso immaginiamo di dover creare un database SQL Server 2005 analogo (TestDB), cioè con una sola tabella (Output) ed un solo campo (DataServizio). Dopo questo, vorrei creare un Integration Services Project con Visual Studio 2005 per trasferire tutti i records dalla tabella di Access a quella di SQL Server.
Ovviamente, quello che sto dicendo è semplificato ed estrapolato da un caso reale che devo affrontare per convertire una mia applicazione che presso alcuni clienti gira ancora sotto Access!  Do per scontato che il db di destinazione sia stato già creato, non è questo lo scopo del mio post.

Torniamo a noi. Vado su Start --> Tutti i programmi --> Microsoft SQL Server 2005 --> SQL Server Business Intelligence Development Studio. Ok, mi si apre Visual Studio 2005. Creiamo un nuovo progetto: se abbiamo fatto l'installazione come si deve, abbiamo un folder chiamato Business  Intelligence Project. In questo folder, troviamo l'Integration Services Project. Selezioniamolo, diamo un nome al progetto (TestDB) e clicchiamo Ok.

Visual Studio 2005 mi apre un bel designer. Dalla toolbox prendo l'item Data Flow Task e lo trascino sulla "superficie" su cui posso disporre tutti gli elementi che fanno parte del progetto. Clicco con il pulsante destro, vado in edit del nuovo oggetto appena creato. Si apre un altro designer, che entra nel dettaglio di quello che deve fare il mio data flow task. Ok, come giustamente mi suggerisce il designer ho bisogno di un source e di un destination. Seleziono un OLE DB Source, lo trascino e lo configuro, facendolo puntare al mio database Access, selezionando la tabella Input e così via. Fatto questo, prelevo un nuovo oggetto, un SQL Server Destination. Prendo la freccina verde dell'OLE DB Source e la collego a quest'ultimo, per dire al motore di SQL Server come trasferire i dati.

Ci siamo quasi. Vado in edit sul SQL Server Destination, configuro la connessione facendola puntare al SQL Server localhost (nel mio caso), al database TestDB e alla tabella Output. Nella scheda Mappings specifico come voglio effettivamente trasferire i records da una tabella all'altra: nel nostro caso è piuttosto semplice, ho solo un campo sia da una parte che dall'altra per cui alla fine vi trovate in una situazione analoga a questa rappresentata sotto:

La tabella a sinistra è quella in Access, quella a destra è in SQL Server 2005. Riassumendo, quindi, voglio trasferire un campo Data/Ora di Access ad un datetime di SQL Server 2005 (ecco, dopo un lungo giro di parole, il titolo del post ). Sembra essere tutto logico e corretto, ma quando confermo cliccando su Ok SQL Server mi segnala nella Error List un validation error che dice quanto segue:

Error 1 Validation error. Data Flow Task: SQL Server Destination [34]: The column "DataServizio" can't be inserted because the conversion between types DT_DATE and DT_DBTIMESTAMP is not supported.

E' una segnalazione molto strana, perchè io non uso un timestamp da nessuna parte, e non riesco a venirne a capo. Ho googlato un po' alla ricerca della soluzione, ma ho trovato solamente 5 risultati. Ciò nonostante, ho trovato questa pagina su un forum di MSDN che adesso sono un po' troppo ko per leggere (e soprattutto capire), ma me la stampo e più di tardi vedo di cavare un ragno dal buco.

powered by IMHO 1.3

Print | posted on domenica 4 dicembre 2005 11:34 | Filed Under [ Sviluppo .NET ]

Feedback

Gravatar

# re: Integration Services: da Data/Ora di Access a datetime di SQL Server 2005

prova a eseguire una conversione esplicita dei tipi di dati usando convert o cast
28/07/2006 15:13 | marco
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET