Newsgroup: it.comp.software.database
Titolo: Conversione campo data (ora) da access a sqlserver

Ho una tabella in access con un campo date/time dove memorizzo un'ora
(di ingresso o uscita), questo controllato tramite il formato nella
form
se lo porto in sqlserver, mi da' il seguente errore:
Errore di inserimento, colonna x, ('uscita',DBTYPE_DBTIMESTAMP) stato
6: overflow dei dati
cosa devo fare?
Greetings,
Alessandro Trebbi
Pesaro, Italy
http://www.b3soft.com

 6: overflow dei dati
con l'import/export del dts non dovrebbe avvenire; a me è successo ché
la data access in input era sputtanata...

 la data access in input era sputtanata...
lo da' sistematicamente... l'unica cosa particolare e' che il campo
contiene un'orario e non una data vera e propria
credo sia proprio un bug, ma non riesco a trovare un workaround...


 credo sia proprio un bug, ma non riesco a trovare un workaround...
Ciao Alessandro,
no, non si tratta di un bug, ma semplicemente di un modo differente di
gestire le informazioni datetime.
I Books Online di SQL Server riportano:
"Microsoft® SQL ServerT 2000 has the datetime and smalldatetime data types
to store date and time data.
There are no separate time and date data types for storing only times or
only dates. If only a time is specified when setting a datetime or
smalldatetime value, the date defaults to January 1, 1900. If only a date is
specified, the time defaults to 12:00 A.M. (Midnight)".
Di conseguenza è del tutto normale che si verifichi un errore di cast se
cerchi di importare una informazione time senza specificare la data
01/01/1900.
Ho preparato un piccolo esempio che ti mostra come procedere.
In Access XP crea un nuovo mdb e definisci la tabella Table1 con la seguente
struttura:
TableID AutoNumber
Hour    Date/Time
Inserisci un un paio di righe:
TableID  Hour
-------- ---------
1        12.35.00
2        13.50.00
A questo punto apri SQL Server Enterprise Manager ed esegui il DTS
Import/Export Wizard.
Come data source seleziona il file mdb, come destination il database tempdb.
Nello step "Specify Table Copy or Query" seleziona "Copy table(s) and
view(s) from the source database". Next;
Fai click sulla tabella Table1 e premi il bottone Transform (...).
Nella Dialog Box "Column Mappings and Transformations" seleziona il tab
"Transformations" e fai click su "Transform information as it is copied to
the destination".
Incolla il seguente codice VB Script:
'**********************************************************************
'  Visual Basic Transformation Script
'  Copy each source column to the
'  destination column
'**********************************************************************
Function Main()
    DTSDestination("TableID") = DTSSource("TableID")
    DTSDestination("Hour") = "1900-01-01 " & DTSSource("Hour")
    Main = DTSTransformStat_OK
End Function
Premi OK, Next, Next, Finish.
L'importazione dovrebbe funzionare correttamente.
Ora Apri il SQL Query Analyzer ed esegui il seguente script:
USE tempdb
GO
SELECT *
FROM dbo.Table1
GO
/* Output:
TableID     Hour
----------- --------------------
1           1900-01-01 12:35:00
2           1900-01-01 13:50:00
(2 row(s) affected)
*/
Se vuoi recuperare solo l'informazione oraria (hh:mm:ss), puoi ricorrere
alla funzione CONVERT, specificando lo stile 8 (o 108):
SELECT TableID, CONVERT(char(8), [Hour], 108) [Hour]
FROM dbo.Table1
GO
/* Output:
TableID     Hour
----------- -------- 
1           12:35:00
2           13:50:00
(2 row(s) affected)
*/
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
UGIdotNET - 
http://www.ugidotnet.org
UGISS - 
http://www.ugiss.org