L'applicativo passa la data scritta "dd/mm/yyyy" (es. 20/11/2009) e SQL
Server 2005 fa una conversione implicita al tipo datetime senza alcun
problema.
Facendo dei test con SQL Server 2008, mi sono accorto che la data non
viene accettata e SQL Server restituisce il messaggio:
-----------------------
The conversion of a varchar data type to a datetime data type resulted
in an out-of-range value
-----------------------
La configurazione delle macchine � questa:
1. Windows server 2003 r2 italiano + SQL Server 2005 italiano
2. Windows server 2008 x64 inglese + SQL Server 2008 x64 inglese
In entrambe le macchine le impostazioni internazionali sono impostate
con numeri e date in formato italiano.
C'� qualcosa che mi sfugge oppure hanno modificato qualcosa nella
conversione delle date?
--
David Martin
la mia palla di vetro mostra "la lingua della connessione"!
p.s. tra noi, dimmi, cosa c'è che non ti piace in yyyymmdd? (E ti
eviti pure il varchar)
E dove lo posso vedere questo dato?
> p.s. tra noi, dimmi, cosa c'� che non ti piace in yyyymmdd? (E ti
> eviti pure il varchar)
Semplicemente l'applicativo non l'ho scritto io, e quindi me lo devo
tenere cos� com'� ;-)
--
David Martin
Uhmmm a memoria... il login direi. Occhio che sia l'ultimo della
catena di comando :)
Ah c'è anche una tabella (nome? sys...) che dice il formato a fronte
della lingua che potresti pacioccare se non puoi cambiare la
connessione
> La configurazione delle macchine � questa:
> 1. Windows server 2003 r2 italiano + SQL Server 2005 italiano
> 2. Windows server 2008 x64 inglese + SQL Server 2008 x64 inglese
>
> In entrambe le macchine le impostazioni internazionali sono impostate
> con numeri e date in formato italiano.
>
> C'� qualcosa che mi sfugge oppure hanno modificato qualcosa nella
> conversione delle date?
>
Le impostazioni internazionali per le converioni implicite fatte da sql
server, a me risulta che non abbiano nessuna influenza.
Visto che hai SO + SQL in inglese credo che sia come ti ha detto dawn, �
cio� � quasi sicuro che tu abbia l'inglese come lingua di default dei vari
account registrati su sql.
O la cambi (da SSMS, nodo Server->Security->Logins, sceglie un account,
doppio click, e verifichi in basso il default language), oppure, visto che
dici che il tuo applicativo invia sempre le date come stringa nel formato
dd/mm/yyyy, metti mano alla sp e applichi una convert indicando il parametro
style in modo da far sapere a sql qual'� il formato di ingresso della
stringa che rappresenta la data:
convert (datetime, @TuaStringaConData, 103)
Hai perfettamente ragione: cambiando la lingua di default nell'account
utente da inglese ad italiano, l'istruzione ha ricominciato a funzionare.
> metti mano alla sp e applichi una convert indicando
> il parametro style in modo da far sapere a sql qual'� il formato di
> ingresso della stringa che rappresenta la data:
>
> convert (datetime, @TuaStringaConData, 103)
La mia era solo una curiosit�, per capire se era cambiato qualcosa con
la versione 2008.
Nel codice che scrivo io, le date sono sempre in formato
datetime/smalldatetime e quindi il problema non si pone. Ma sappiamo
anche che quando il codice � scritto da fornitori esterni, non lo si pu�
toccare e quindi bisogna convivere con alcuni piccoli problemini...
Grazie di tutto
--
David Martin