Newsgroup: it.comp.software.database
Titolo: Problema query Case Sensitive

Salve a tutti, devo porvi un problema che mi sta capitando da quando ho
montato SQL Server 2000.Le query che eseguo sono corrette solo se i
campi e i nomi delle tabelle sono scritte tali e quali come la struttura
della tabella, ovvero sono Case Sensitive; cosa strana dato che,per
quanto ne so io,il linguaggio SQL non è case sensitive. Non è che c'è
qualche opzione da cambiare proprio in SQL Server ?
Grazie
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 qualche opzione da cambiare proprio in SQL Server ?
Mai visto niente del genere. Posta la tua query.
Davide

 wrote in message
news:abdf0r$gldk2$
4...@ID-18487.news.dfncis.de

PRENDIAMO PER ESEMPIO IL DATABASE FORNITURE
Apro Query Analyzer
Premesso che le colonne della tabella PRODOTTO sono :
-COD_PROD(int,Not Null)
-NOME(varchar(50),Not Null)
-GIACENZA(int,Not Null)
-SC_MIN(smallint,Not Null)
Eseguo la query :
SELECT COD_PROD,NOME FROM PRODOTTO
Tutto OK
Eseguo la query :
SELECT * FROM PRODOTTO
Tutto OK
Eseguo la query :
Select * FROM Prodotto
Server: messaggio 208, livello 16, stato 1, riga 1
Il nome di oggetto 'Prodotto' non è valido.
Provo ad eseguire:
SELECT COD_PROD,Nome FROM PRODOTTO
Server: messaggio 207, livello 16, stato 3, riga 1
Il nome di colonna 'Nome' non è valido.


[CUT]
Stai usando qualche link di database o qualche
strumento non Microsoft?
Ricordati che nel data dictionary i nomi delle tabelle sono
memorizzati in maiuscolo.
Ti faccio un esempio.
Se da Utilizzo strumenti Oracle per accedere ad
Access devo per forza indicare i nomi delle tabelle in
maiuscolo.
        fammi sapere
                                                danilo

 Grazie
Ernesto,
quando installi SQL Server 2000 uno dei parametri da valutare
e' la "collation".
La collation in SQL Server raggruppa le regole per:
- il character set da utilizzare
- il modo di ordinare i caratteri (abcdeABCDE oppure aAbBcCdDeE)
- il modo di comparare i caratteri (a=A=à oppure a<>A<>à)
L'ultimo dei quali non determina solo il modo di comparare
i valori contenuti nelle tabelle, ma anche il modo di comparare
i nomi degli oggetti (dopotutto anche lo schema e' archiviato
nelle tabelle di sistema).
Per dirla in un'altro modo: se hai scelto una collation "case sensitive",
la "case sensitiveness" viene applicata anche ai nomi dei campi, delle
tabelle, delle viste ecc.
(Nota: nelle versioni precedenti di SQL Server queste caratteristiche
venivano specificate tramite tre distinti parametri: il sort order,
il chacter set e la Unicode Collation, mentre nella versione 2000
sono raggruppati in un solo parametro).
Fino alla versione 7.0 queste regole potevano essere specificate solo
a livello di intera installazione (quindi per tutti i database).
Dalla versione 2000 le regole specificate in fase di installazione
vengono impostate per i database di sistema e diventano un default
per tutti i nuovi database.
In fase di creazione di un nuovo database, puoi specificare una
collation diversa. Non solo, una volta scelta diventa il default
per tutte le tabelle, ma puoi specificare una collation diversa,
in fase di creazione, per ogni singola tabella. La granularita'
arriva alla singola colonna.
Il mio consiglio e' di installare sempre SQL Server con una
collation "case insensitive" ed eventualmente cambiarla solo
per i database, le tabelle o le colonne che necessitano
veramente di tale caratteristica.
Sono piuttosto rari i casi dove e' effettivamente necessario fare
delle ricerce tenendo conto delle maiuscole/minuscole.
Se non vuoi gestire la collation fino a livello di tabella/colonna,
valuta anche il fatto che se le ricerce case sensitive sono poche,
ed installi il database con una collation case insensitive, puoi
sempre fare quelle ricerce convertendo i valori a varbinary,
considera queste tre query:
SELECT *
FROM dbo.authors
WHERE au_lname = 'white'
SELECT *
FROM dbo.authors
WHERE CAST(au_lname as varbinary) = CAST('white' AS varbinary)
SELECT *
FROM dbo.authors
WHERE CAST(au_lname as varbinary) = CAST('White' AS varbinary)
Attenzione al fatto che la conversione rallenta la query.
Ciao,
--
Gianluca Hotz
Backoffice MVP (SQL Server) MCP SQL Server and MCP Windows
Vice-President of the Italian User Group for SQL Server
Founding Member of the Italian User Group for .NET
http://www.ghotz.com
http://www.ugiss.org

 Grazie
SQL Server 200, in fase di setup, lascia la possibilita` di installare
l`istanza
con l`opzione "Case Sensitive", e` possibile che tu, in fase di
installazione,
abbia usato la Collation "Case Sensitive"?
Se non ricordo male ci dovrebbe essere il check box "Case-sensitive "
nel dialog box
 "Collation Settings "
Frilla
