Condizione WHERE in Sql server 2005

mercoledì 06 agosto 2008 - 21.50

sogno_il_canada Profilo | Newbie

Buonasera a tutti, sto imparando ad usare sql server 2005.
Ho creato una semplice tabella e sto provando a scrivere alcune query per prendere dimestichezza, tenendo conto che usando Access già me la cavicchio.
Provo questa semplicissima query:

SELECT * FROM Tbl_Anagrafica_Clienti
WHERE prov = 'VA'

ma sorpresa ecco cosa mi restituisce:
"Messaggio 402, livello 16, stato 1, riga 1
I tipi di dati text e varchar nell'operatore equal to sono incompatibili "

Cosa sto sbagliando?

Grazie

Massimo

kloor Profilo | Newbie

>
>SELECT * FROM Tbl_Anagrafica_Clienti
>WHERE prov = 'VA'
>
>Cosa sto sbagliando?

Ciao Massimo,
Il campo PROV è evidentemente di tipo text/ntext.
Ti consiglio di utilizzare varchar/nvarchar o char/nchar che sono i tipi dati che più si avvicinano al tipo Stringa di access.
Altrimenti se proprio non puoi fare a meno di usare text (ma per memorizzare i due caratteri della sigla di province puoi farne a meno) fai:

SELECT * FROM Tbl_Anagrafica_Clienti WHERE CAST(prov AS varchar) = 'VA'

Ciao,
Matteo
M.

sogno_il_canada Profilo | Newbie

>>
>>SELECT * FROM Tbl_Anagrafica_Clienti
>>WHERE prov = 'VA'
>>
>>Cosa sto sbagliando?
>
>Ciao Massimo,
>Il campo PROV è evidentemente di tipo text/ntext.
>Ti consiglio di utilizzare varchar/nvarchar o char/nchar che
>sono i tipi dati che più si avvicinano al tipo Stringa di access.
>Altrimenti se proprio non puoi fare a meno di usare text (ma
>per memorizzare i due caratteri della sigla di province puoi
>farne a meno) fai:
>
>SELECT * FROM Tbl_Anagrafica_Clienti
>WHERE CAST(prov AS varchar) = 'VA'
>
>
>Ciao,
>Matteo
>M.
Grazie Matteo, mi sa che dovrai avere moooolta pazienza.

Ciao

lbenaglia Profilo | Guru

>Buonasera a tutti, sto imparando ad usare sql server 2005.
>Ho creato una semplice tabella e sto provando a scrivere alcune
>query per prendere dimestichezza, tenendo conto che usando Access
>già me la cavicchio.
>Provo questa semplicissima query:
>
>SELECT * FROM Tbl_Anagrafica_Clienti
>WHERE prov = 'VA'
>
>ma sorpresa ecco cosa mi restituisce:
>"Messaggio 402, livello 16, stato 1, riga 1
>I tipi di dati text e varchar nell'operatore equal to sono incompatibili
>"
>
>Cosa sto sbagliando?

Ciao Massimo,

Il data type Text veniva utilizzato in passato per memorizzare stringhe con una lunghezza massima di 2^31-1 caratteri.
La sua gestione era abbastanza complessa e prevedeva l'utilizzo di funzioni ad-hoc.
In SQL Server 2005 è stato deprecato a favore del data type varchar(max) il cui utilizzo è del tutto simile a quello di un normale data type stringa a lunghezza variabile.

Nel tuo caso dato che le provincie sono di 2 caratteri, puoi definire la colonna prov come char(2), ovvero stringa a lunghezza fissa di 2 caratteri:

ALTER TABLE dbo.Tbl_Anagrafica_Clienti ALTER COLUMN Prov char(2) NOT NULL;

Per maggiori informazioni fai riferimento ai Books Online, ovvero la documentazione di SQL Server

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5