Sever SQL: stranezze scioccanti...

giovedì 30 ottobre 2008 - 12.12

Superpippo1980 Profilo | Junior Member

Ho ricreato un database che girava su sql server 2000 nel 2005..
Ho una tabella fatta in questo modo:
Gruppi (IDGruppo int PK, Nome varchar 255)


Facendo questa select:
Select IDGruppo, Nome, Nome From Gruppi
( tralasciamo il motivo perchè replico 2 volte la stessa colonna.... )
mi da un errore di Ambiguos Name su Nome.....

Ovviamente facendo Select IDGruppo, Nome From Gruppi funziona....

Sembrerebbe quasi come quando si fa un INNER JOIN e ci sono 2 colonne con lo stesso nome.,.. e quindi ho provato anche
Select IDGruppo, Gruppi.Nome, Gruppi.Nome From Gruppi
ma stesso errore...


Sono sicuro che sia tutto corretto perchè questo db l'ho già fatto su altri 2 sql server 2000 e su altri 3 sql server 2005 e non mi ha mai dato problemi ( e poi è così semplice la query che nn credo di essere rincoglionito)...

Vi chiedo: potrebbbe essere un settaggio particolare di SQL su quella makkina che non mi permette di fare query replicando il nome della colonna?!
Cosa potrebbe essere?!

lbenaglia Profilo | Guru

>Vi chiedo: potrebbbe essere un settaggio particolare di SQL su
>quella makkina che non mi permette di fare query replicando il
>nome della colonna?!
>Cosa potrebbe essere?!
Mai visto un comportamento del genere, però è intrigante
Non mi risulta che esista un parametro di configurazione che vieti il ripetersi delle colonne nella SELECT list.
L'errore si verifica con che versione ed edizione di SQL Server?
Puoi postare il piano di esecuzione della query?
Che succede se specifichi un alias di colonna?

SELECT IDGruppo, Nome, Nome AS Nome1 FROM Gruppi;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ale.orma Profilo | Junior Member

Strano... forse potrebbe trattarsi del livello di compatibilità impostato sul database (SQL 2005 è 90, SQL 2000 è 80).
Prova a lanciare prima questa istruzione e poi riesegui la query:
sp_dbcmptlevel 'NOMEDB',80

Superpippo1980 Profilo | Junior Member

Attenzione...sono fusissimo!!! Mi scuso con entrambi...
L'errore è dato perchè metto dopo metto
ORDER BY NOME.

Se faccio solo Select idgruppo, nome, nome from gruppi FUNZIONA.
Select idgruppo, nome, nome from gruppi Order by nome mi da Ambiguos Name...
Select idgruppo, nome, nome as x from gruppi Order by nome VA

Ciò però non toglie questa cosa:
dal cliente su cui avevo installato il db anche questa query non da problemi..... perchè su un'altra makkina la da???!!!

Vi richiedo scusa per la segnalazione inizialmente errata.... troppo lavoro forse :)


Superpippo1980 Profilo | Junior Member

nelle proprietà del Db la compatibilità è 80.

lbenaglia Profilo | Guru

>Strano... forse potrebbe trattarsi del livello di compatibilità
>impostato sul database (SQL 2005 è 90, SQL 2000 è 80).
No, ho appena fatto una prova ripristinando un backup del Northwind di SQL Server 2000 su SQL Server 2008 lasciando il compatibility level a 8.0 ma la query funziona correttamente:

SELECT LastName, LastName FROM northwind.dbo.Employees;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lbenaglia Profilo | Guru

>dal cliente su cui avevo installato il db anche questa query
>non da problemi..... perchè su un'altra makkina la da???!!!
Per me le query sono diverse, non è possibile che quella query possa andare...

SELECT LastName, LastName FROM northwind.dbo.Employees ORDER BY LastName; /* Output: Msg 209, Level 16, State 1, Line 4 Ambiguous column name 'LastName'. */

Anche utilizzando AdventureWorks2008 (quindi con compatibility level a 10) il discorso non cambia:

SELECT JobTitle, JobTitle FROM AdventureWorks2008.HumanResources.Employee ORDER BY JobTitle; /* Output: Msg 209, Level 16, State 1, Line 4 Ambiguous column name 'JobTitle'. */

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Superpippo1980 Profilo | Junior Member

quindi in qualche modo...stiamo dicendo che la stranezza è sulla makkina in cui va!

lbenaglia Profilo | Guru

>quindi in qualche modo...stiamo dicendo che la stranezza è sulla
>makkina in cui va!
No, io dico che le query sono diverse.

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Superpippo1980 Profilo | Junior Member

anzi...sui 3 clienti in cui l'avevo installato prima va...

l'unica cosa di diverso che ho fatto su questa di diverso è che ho generato il Db partendo da uno script.

nei 3 precedenti casi avevo fatto l'esportazione da 2000 a 2005... di più non saprei cosa pensare..

ale.orma Profilo | Junior Member

A me una select tipo:

select codice, nome, nome from NOMI order by nome

dà l'errore se il livello di compatibilità è 90. Se lo imposto a 80 la query viene eseguita senza dare nessun errore.

lbenaglia Profilo | Guru

>nei 3 precedenti casi avevo fatto l'esportazione da 2000 a 2005...
>di più non saprei cosa pensare..
Nemmeno io, finché non vedo, non ci credo

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Superpippo1980 Profilo | Junior Member

A me una select tipo:
select codice, nome, nome from NOMI order by nome
dà l'errore se il livello di compatibilità è 90. Se lo imposto a 80 la query viene eseguita senza dare nessun errore.


Quindi anche a te va?! che casino...

ale.orma Profilo | Junior Member

Il problema si verifica se aggiungi ORDER BY su una colonna che hai specificato più volte senza dare alias diversi. Solo con livello compatibilità 80 non segnala errori.

lbenaglia Profilo | Guru

>Va solo dopo aver impostato il livello compatibilità ad 80
Boh, su SQL Server 2008 non va.
Ma la domanda fondamentale è: perché ci si vuole fare del male a tutti i costi?
Non si può evitare la ripetizione del nome, o almeno utilizzare degli alias di colonna univoci?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Superpippo1980 Profilo | Junior Member

Ho lanciato la query che mi avevate suggerito.
sp_dbcmptlevel 'NOMEDB',80

ora va tutto..

ma sono sicuro che nelle proprietà di compatibilità ci fosse già 80..

beh che dire... vi ringrazio tanto a entrambi..

troppo mitici!!!




Superpippo1980 Profilo | Junior Member

no hai ragione:
vi spiego la mia domanda.. questo è un software su cui sto lavorando da circa 4 anni...
avendo trovato un errore su questa stupidissima query ( vallo tu a capire perchè avevo messo 2 volte la stessa colonna )
avevo paura che da qualche parte ci fosse replicato questa ambiguità...

cmq grazie mille ragaz.
troppo i migliori
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5