Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Parametro data in formato varchar funziona con MSSQL2005 e non con MSSQL2008

15 views
Skip to first unread message

David Martin

unread,
Nov 20, 2009, 2:43:01 AM11/20/09
to
Ciao a tutti,
ho un applicativo che esegue una sp su SQL Server; in questa sp c'� un
parametro che � una data ma � dichiarato con tipo varchar(20).
La sp prende la data passata come parametro e aggiorna un campo in una
tabella; nella tabella il campo � di tipo datetime.

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

dawn

unread,
Nov 20, 2009, 2:47:00 AM11/20/09
to
On 20 Nov, 08:43, David Martin <david.mar...@libero.it> wrote:
> Ciao a tutti,
> ho un applicativo che esegue una sp su SQL Server; in questa sp c'è un
> parametro che è una data ma è dichiarato con tipo varchar(20).

> La sp prende la data passata come parametro e aggiorna un campo in una
> tabella; nella tabella il campo è di tipo datetime.

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)

David Martin

unread,
Nov 20, 2009, 2:54:00 AM11/20/09
to
dawn wrote:
> On 20 Nov, 08:43, David Martin <david.mar...@libero.it> wrote:
>> Ciao a tutti,
>> ho un applicativo che esegue una sp su SQL Server; in questa sp c'� un
>> parametro che � una data ma � dichiarato con tipo varchar(20).

>> La sp prende la data passata come parametro e aggiorna un campo in una
>> tabella; nella tabella il campo � di tipo datetime.

>
> la mia palla di vetro mostra "la lingua della connessione"!

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

dawn

unread,
Nov 20, 2009, 3:21:28 AM11/20/09
to
On 20 Nov, 08:54, David Martin <david.mar...@libero.it> wrote:
>
> > la mia palla di vetro mostra "la lingua della connessione"!
> E dove lo posso vedere questo dato?

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

Zulu

unread,
Nov 20, 2009, 3:50:21 AM11/20/09
to
"David Martin" ha scritto nel messaggio
news:7mmvk5F...@mid.individual.net...

> 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)


David Martin

unread,
Nov 20, 2009, 4:54:46 AM11/20/09
to
Zulu wrote:
> "David Martin" ha scritto nel messaggio
> news:7mmvk5F...@mid.individual.net...
>
>> 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.

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

0 new messages