1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
cyber_man ha scritto:
Francamente dal tuo post non si capisce il vero motivo progettuale che ha spinto M$ a eliminare l'ORDER BY ma si capisce solo che tu sei a favore.


...non so con quanta attenzione hai letto i miei 2 post ma speravo che fosse chiaro il fatto che l'ordinamento nella vista sia assolutamente da evitare e sia da demandare alla query che utilizza la vista


Inoltre mi sembra che parli molto del TOP(100) PERCENT che non c'entra troppo con l'ORDER BY, è forse il work around, ma poi non funziona.


...se dici che non funziona non può essere un workaround... acqua... :-)


In particolare capisco che l'ordinamento in query annidate sia inutile ma quantomeno, visto che il query optimizer conosce l'ordine di annidamento, che sia rispettato nell'ultima e cioè in quella che poi invia i record a qualcosa di "esterno" o di chiamante.


...è un problema aggiungere l'order by in fondo alla tua query?!? Cerca di vinceere la pigrizia e fai questo sforzo... ;-)


Ma poi, l'oggetto view stà nel DataBase, e io, lato front end, non me ne voglio preoccupare...


Così come DEVI preoccuparti di scrivere le query (o vuoi non doverti preoccupare neanche di questo? :-)), in esse includi anche l'ordinamento.


Il DataBase mastica tabelle e ordinamenti... Che faccia il suo lavoro e che non rompa le scatole a che ne fa un altro!


Daccordissimo, ma l'ordinamento è parte integrante della query...


Per me è inammissibile, e sono sicuro che Oracle non si comporta così.


Se hai trovato un prodotto più confacente alle tue esigenze per quale motivo insisti nel voler tentare di lavorare con SQL Server?!?


Io che sono il programmatore mi occuperò della parte "grafica" e della presentazione dei dati, mentre il DBA si occuperà di ottimizzare le query e presentare i dati nell'ordine in cui li vuole.
Non solo ma se un domani ha voglia (il DBA), può, da solo, cambiare l'ordine dei dati ecc...
Invece adesso devo creagli il sistema per "parametrizzare" l'ordinamento di ogni pagina... Continuo ad essere scioccato!


Come ti ha già detto Christian... forse dovresti utilizzare delle stored procedure... ;-)


Mi dispiace, il Mondo sarà con M$ ma a me non mi convince per niente la cosa.


Non credo che qualcuno non dormirà per questo... :-)

Bye
215 messaggi dal 07 settembre 2005
....è un problema aggiungere l'order by in fondo alla tua query?!? Cerca di
vinceere la pigrizia e fai questo sforzo... ;-)

Non è uno sforzo anzi... Ma il "problema" è forse qualcosa che non è facile capire.
Tento di spiegarmi meglio ma sicuramente non sono bravo:
Tu ti preoccupi di scrivere le query ? Bravo, sei anche un DBA ! Io le query non le scrivo, me le scrive un DBA dedicato, uno per DB, e spesso anche quasi una persona per tabella o gruppo di tabelle. Non posso come programmatore, che deve solo presentare i dati, entrare nel merito di centinaia di tabelle e query, ci sono persone che lo fanno per me e meglio di me.

Non voglio sminuire il mio ruolo di programmatore ma in un TEAM si lavora così ;-)

Come ti ha già detto Christian... forse dovresti utilizzare delle stored
procedure... ;-)

Quindi tu mi consigli, per fare in modo che il DBA possa decidere l'ordine con cui i record vengono mostrati nel front end, di far disegnare graficamente la VIEW dal DBA che poi la usa in una apposita Stored procedure che ordina il risultato finale della VIEW. Va bene... Basta sapere che è la posizione ufficiale di M$.

Se hai trovato un prodotto più confacente alle tue esigenze per quale
motivo insisti nel voler tentare di lavorare con SQL Server?!?
Perché ho un sacco di DB su SQL Server e non so se chi paga vorrà investire, decine di migliai di euro, per acquistare un prodotto che non mantiene la compatibilità con il suo precedente.

Ciao.
Riccardo.
2.410 messaggi dal 13 febbraio 2003
Contributi
"cyber_man" <cyber_man> ha scritto nel messaggio news:257598@...

Tento di spiegarmi meglio ma sicuramente non sono bravo: Tu ti preoccupi di scrivere le query ? Bravo, sei anche un DBA ! Io le query non le scrivo, me le scrive un DBA dedicato, uno per DB, e spesso anche quasi una persona per tabella o gruppo di tabelle. Non posso come programmatore, che deve solo presentare i dati, entrare nel merito di centinaia di tabelle e query, ci sono persone che lo fanno per me e meglio di me.

Non voglio sminuire il mio ruolo di programmatore ma in un TEAM si lavora così ;-)

mah forse nel tuo team, in tutto il resto del mondo lo sviluppatore crea le query e SOPRATTUTTO CONOSCE SQL e chiede consulenza e supporto al dba per l'ottimizzazione, ci mancherebbe che il dba deve perdere tempo dietro a ogni query :-D

Quindi tu mi consigli, per fare in modo che il DBA possa decidere l'ordine con cui i record vengono mostrati nel front end, di far disegnare graficamente la VIEW dal DBA che poi la usa in una apposita Stored procedure che ordina il risultato finale della VIEW.

Allora non ci capiamo, lo sviluppatore in questo caso TU decidi quello che vuoi fare il dba subentra a lavori ultimati per ottimizzare dba, fare il tuning dello stesso, suggerire e lavorare gomito a gomito con lo sviluppatore per trovare soluzioni migliori più performanti per il db. Ma ovviamente il dba NON crea le query che fanno altrimenti gli sviluppatori??

Va bene... Basta
sapere che è la posizione ufficiale di M$.

Ancora? mi spieghi perchè tiri in ballo M$ quando il problema è tuo??? Consiglio vivamente di passare il libreria e leggere bene il capitolo 5 del libro Fondamenti di SQL editore Mc Graw Hill (numero ISBN 88-386-4354-7)
Perché ho un sacco di DB su SQL Server e non so se chi paga vorrà investire, decine di migliai di euro, per acquistare un prodotto che non mantiene la compatibilità con il suo precedente.

ti ripeto ancora una volta, IL PROBLEMA È TUO, chiunque usa e conosce le basi di SQL (inteso come linguaggio ansi SQL) sa che le view non accettano order by pertanto il problema non si pone
Invece di accanirti su un errore perchè non ne approfitti e dai una bella lettura al libro che ti ho consigliato sopra almeno imparerai a scrivere codice sql corretto senza aver bisogno di accrocchi simili e soprattutto evitando queste discussioni in quanto inutili :-D
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Senti, scriviti le tue viste come

SELECT TOP 99.999999999 PERCENT campi
FROM dbo.Tabella
ORDER BY quellochetipare

così chiudiamo questo thread inutile, tanto dubito che lavoreremo mai insieme (e nel tal caso sarei io ad avere la gestione del database server e ad avallare i passaggi in produzione).

Per tutti gli altri: EVITATE SEMPRE TALI PORCHERIE ED INCLUDETE LA CLAUSOLA DI ORDINAMENTO SOLO QUANDO VIENE RICHIAMATA LA VISTA.

PS: Il DBA è colui che gestisce il database server da un punto di vista amministrativo/sistemistico. Chi si occupa della parte di design della struttura e di scrivere le interfacce per il team di sviluppo (viste, sp e udf) è il DB designer, ovvero una figura più vicina allo sviluppatore che al sistemista. Ci sono certamente delle sovrapposizioni o molto spesso una stessa figura che si preoccupa di entrambi gli aspetti. Ma sempre sotto ruoli ben distinti fra loro.

Bye
215 messaggi dal 07 settembre 2005
Gli argomenti di queste mie mail sono 2:

1)
M$ in tutti i suo DB < SQL Server 2005 dà una prestazione (fuori standard). Chi la usa (un po? bischero come me) e volesse passare a SQL Server 2005 si deve attaccare alle funi del cielo, perché non esiste un livello di compatibilità per dare tempo alla migrazione.

2)
A prescindere dagli standard ansi, a cui le persone dotte come voi sono tanto affezzionate, nessuno mi ha dato una motivazione tecnica valida del perché nelle VIEW non ci può stare l'ORDER BY.

A me sembrano argomenti construttivi se poi in questa lista si parla solo di argomenti elementari o comodi perché si fa presto a fare replay... Va bene!
La mia Posizione:
1)
L'atteggiamento è discutibile, non sarà questa la sede per discuterne ma non mi potete dire che è un atteggiamento corretto verso il cliente.
2)
Il Query Designer è una figura differente dal Software Developer, nelle piccole realtà forse spesso sono la stessa persona, in altre realtà sono spesso più persone.

Come Team Manager non vi capita mai che il committente vi chiede di modificare l'ordinamento dei record di una pagina del suo sito che dietro ha una select che convolge decine di tabelle ?

Voi come fate ?
- Chiamate il Software Develeper che apre Visual Strudio
- Cerca la Pagina che contiene l'istruzione SQL (che magari è centinaia di righe), la copia e la incolla in un SQL designer
- Chiamate la persona che funge da Query Designer di quell'area di tabelle e gli chiedete di modificare l'SQL per ordinare i dati per il campo X - Il Query Designer, giustamente si prende il suo tempo perché deve valutare se inserire indici o quant'altro per migliorare le prestazioni - 5 Ore dopo vi chiama dicendo che ha finito e vi manda per email la stringa SQL modificata
- il Software developer che stava lavorando su altre cose riapre Visual Strudio
- Guadra un po? il codice e crede che sia stato aggiunto solo la clausola ORDER BY e quindi incolla solo quella parte mentre il Query Designer aveva stravolto paurosamente la query.
- il Software developer quindi compila l'applicazione, la pubblica sul sito del cliente e chiama voi dicendo che ha finito
- voi chiamate il cliente dicendo che adesso può guardare
- Il cliente vi chiama dicendo che la pagina è paurosamente lenta e non rinnoverà il contratto

Non mi bacchettate troppo è solo un esempio scherzoso :-)))

Se aveste fatto come me invece:
- Io chiamo il Query Designer e gli dico di campiare l'ordinamento della view. Finito! Nessuna ricompilazione e minimo dispendio di risorse.
Se poi mi volete dire che devo usare una Stored Procedure OK, ma non mi dite che il metodo giusto è il vostro.

Se vi ho annoiato, scusatemi, io li ritengo argomenti interessanti.
Ciao.
Riccardo.
215 messaggi dal 07 settembre 2005
Perché sei così sicuro che non lavoreremo mai insieme ?
In verità ti ho seguito molto in questa lista e ho pensato spesso a te come consulente per una bella ricontrollata del DB in questione.
Per adesso ho altre priorità, ma non so se tu fai anche attività di questo tipo...

Ciao.
Riccardo.
2.410 messaggi dal 13 febbraio 2003
Contributi
"cyber_man" <cyber_man> ha scritto nel messaggio news:257621@...
1)
M$ in tutti i suo DB < SQL Server 2005 dà una prestazione (fuori standard).
Chi la usa (un po? bischero come me) e volesse passare a SQL Server 2005 si deve attaccare alle funi del cielo, perché non esiste un livello di compatibilità per dare tempo alla migrazione.

Non esiste compatibilità sugli accrocchi (top 100 percent)
e sarebbe ora di pulire quel codice non trovi

2)
A prescindere dagli standard ansi, a cui le persone dotte come voi sono tanto affezzionate, nessuno mi ha dato una motivazione tecnica valida del perché nelle VIEW non ci può stare l'ORDER BY.

I limiti delle views
Non è possibile usare la clausola ORDER BY in una view
Questa limitazione può sembrare assurda, ma difatti non è possible specificare un ordinamento tramite la clausola ORDER BY per il ROWSET ritornato da una view. Il motivo di tutto ciò e che la view come la tabella ritorna un set di dati che non possiede alcun ordinamento. (Standard ANSI)
Estratto da http://freeasp.html.it/guide/lezione.asp?id=135

PS primo risultato di google con le keyword "creare viste sql" pertanto bastava usare google

A me sembrano argomenti construttivi se poi in questa lista si parla solo di argomenti elementari o comodi perché si fa presto a fare replay... Va bene!

allora posta domande costruttive e non elementari e ne discutiamo più che volentieri :-D

ma il tuo ostinarti ad usare ORDER BY nelle viste è sbagliato e ti ripeto è errato in mssql, oracle, db2, sybase, informix, ecc. in quanto è errato in SQL

La mia Posizione:
1)
L'atteggiamento è discutibile, non sarà questa la sede per discuterne ma non mi potete dire che è un atteggiamento corretto verso il cliente.

vedi sopra, cerco di farti capire in modo semplice:

Se acquisti un paio di scarpe e le calzi al contrario (piede sinistro, scarpa destra e così per l'altro piede), il tuo order by nelle viste, non puoi andare a reclamare al negozio, nel tuo caso ms, hai 2 soluzioni, o compri una paio di scarpe più grandi così non ti danno fastidio e puoi sempre metterle al contrario, soluzione proposta da Luca top 99.9999, oppure fai la cosa più giusta e le calzi correttamente, quindi la smetti di usare ORDER BY nelle viste

2)
Il Query Designer è una figura differente dal Software Developer, nelle piccole realtà forse spesso sono la stessa persona, in altre realtà sono spesso più persone.


ok

Come Team Manager non vi capita mai che il committente vi chiede di modificare l'ordinamento dei record di una pagina del suo sito che dietro ha una select che convolge decine di tabelle ?

si certo

Voi come fate ?
- Chiamate il Software Develeper che apre Visual Strudio

se l'ho fatto io lo gestisco io, sempre che ne ho il tempo altrimenti giro il problema al chi lo ha gestito

- Cerca la Pagina che contiene l'istruzione SQL (che magari è centinaia di righe), la copia e la incolla in un SQL designer

già qui non ci siamo, il codice sql non deve esistere nelle pagine, è bene usare stored procedure parametriche

- Chiamate la persona che funge da Query Designer di quell'area di tabelle e gli chiedete di modificare l'SQL per ordinare i dati per il campo X - Il Query Designer, giustamente si prende il suo tempo perché deve valutare se inserire indici o quant'altro per migliorare le prestazioni - 5 Ore dopo vi
chiama dicendo che ha finito e vi manda per email la stringa SQL modificata
- il Software developer che stava lavorando su altre cose riapre Visual Strudio

personalmente non assumerei mai uno sviluppatore di applicazioni che non conosce almeno le basi sql, come fa uno sviluppatore a lavorare con recordset a gestire binding quando non capisce neppure il codice scritto in una stored procedure??

- Guadra un po? il codice e crede che sia stato aggiunto solo la clausola ORDER BY e quindi incolla solo quella parte mentre il Query Designer aveva stravolto paurosamente la query.

ORDER BY si mette nelle stored procedure e non nelle viste pertanto in query designer richiami la vista (esattamente come fai con le tabelle) e LI IMPOSTI ORDER BY e non nella vista

- il Software developer quindi compila l'applicazione, la pubblica sul sito
del cliente e chiama voi dicendo che ha finito
- voi chiamate il cliente dicendo che adesso può guardare
- Il cliente vi chiama dicendo che la pagina è paurosamente lenta e non rinnoverà il contratto

Non mi bacchettate troppo è solo un esempio scherzoso :-)))

personalmente andrei a bere con il cliente a spese dell'incompetente che ha sviluppato l'applicazione, che da lunedì prenderà un mesetto di congedo non pagato per leggersi per bene le basi di SQL

:-D

Se aveste fatto come me invece:
- Io chiamo il Query Designer e gli dico di campiare l'ordinamento della view. Finito! Nessuna ricompilazione e minimo dispendio di risorse. Se poi mi volete dire che devo usare una Stored Procedure OK, ma non mi dite che il metodo giusto è il vostro.

non sono così presuntuoso non lo dico io ma tutti i testi di sql
Un consiglio smettila di usare il query designer per un po' e inizia a scriverle le query almeno entrerai nella loro logica e dopo aver scritto 30 query con join in 7 divese tabelle capirai a cosa servono le viste :-D
Se vi ho annoiato, scusatemi, io li ritengo argomenti interessanti.


Nessuna noia, è un problema abbastanza comune di molti sviluppatori fermarsi al loro problema e cercare di risolverlo nel modo errato complicando la vita ai poveri dba o sistemisti che dovranno far girare il vostro codice :-D
215 messaggi dal 07 settembre 2005
Scusami Christian ma il tuo atteggiamento è inaccettabile.
Ti ostini a far cadare dal cielo le verità che conosci e non spieghi tecnicamente il motivo che ti ha indotto ad usarle ad un ignorante come me.
Sarai sicuramente un bravo sviluppatore ma come docente non sei granchè :-D
Non esiste compatibilità sugli accrocchi (top 100 percent) e sarebbe ora
di pulire quel codice non trovi

Stavo per scrivere "Mai usato TO 100 percent!" ma invece adesso mi accorgo che se in una view specifico un ordinamento allora TOP 100 PERCENT mi viene aggiunto automaticamente.
Non SOLO! Ma "SELECT * FROM (SELECT * FROM A ORDER BY a.a1)" da l'eerore di cui parlate!

Strano che non me ne sia mai accrto... Allora forse non sono tante le query dove uso ORDER BY!

Vedi che stò imparando qualcosa ? Grazie Maestro Grazie... Mi Mandi la fattura ? :-D

Per il punto 2 dalla tua risposta:
già qui non ci siamo, il codice sql non deve esistere nelle pagine, è bene
usare stored procedure parametriche

Deduco quindi che per presentare una VIEW in una pagina WEB tu, al fine anche solo dell'ordinamento, passi prima da una SP.
Allora deduco che se usi la SP, anche solo in alcuni casi, solo al fine dell'ordinamento sicuramente ti farebbe comodo che la VIEW potesse ritornare all'applicazione un set di dati ordinato.

Ma se non mi spieghi il motivo tecnico che spinge cotanti standard (ansi, mssql, oracle, db2, sybase, informix, ecc) a rendere "errato" come scrivi tu l'uso di ORDER BY io non lo capirò mai.

Tu dici che è "errato" proprio perché è uno standard ma mi sembra che sia una motivazione puerile...
Se SERVE, e abbiamo visto che SERVER anche a te poter far uscire da una VIEW record ordinati, ci sarà un motivo più SAGGIO che il semplice ERRORE che proponi tu.

Forse mi deve rispondere qualcuno di più preparato?

Io ignorante sono e ignorante rimango ma quando non capisco mi chiedo il perché delle cose non le prendo come oro colato.

Ciao.
Riccardo.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.