Welcome to Sign in | Help
in Search

order by

Last post 02-09-2009, 2:43 PM by rsocol. 11 replies.
Sort Posts: Previous Next
  •  02-09-2009, 1:19 PM 6720

    order by

    Salut
    Am trecut de cateva zile la sql server 2005
    (de la 2000)

    si am niste view uri care nu mai dau elementele in ordine desi au in definitie pus order by ul

    de exemplu : view =lstCategorii
    select denCategorie,CodCategorie
    from Categorii
    order by denCategorie

    il rulez din sql server 2005
    si imi da o ordine aiurea..

    daca fac select * from lstCategorii order by dencategorie
    atunci imi pune ok.

    aveti idee ce anume ar trebuie sa fac
    sau s-a uitat ceva cand s-a facut migrarea la 2005 ?

    multumesc

  •  02-09-2009, 1:36 PM 6721 in reply to 6720

    Re: order by

    Nu ai "uitat" nimic. Asta e comportamentui SQL 2005. Vezi BOL ---> "Sorting Rows with ORDER BY " si http://blogs.msdn.com/sqltips/archive/2005/07/20/441053.aspx .
  •  02-09-2009, 1:38 PM 6722 in reply to 6720

    Re: order by

    Dacă faci un "SELECT * FROM SomeView", fără să precizezi ORDER BY, atunci rezultatele pot fi obţinute în orice ordine (chiar dacă view-ul este ceva de genul "CREATE VIEW SomeView AS SELECT TOP 100 PERCENT ... ORDER BY Something"). Dacă vrei să obţii rezultatele într-o anumită ordine, trebuie să specifici clauza ORDER BY în instrucţiunea SELECT prin care ceri datele (nu în view). Vezi:
    http://blogs.msdn.com/queryoptteam/archive/2006/03/24/560396.aspx

    Răzvan
  •  02-09-2009, 1:41 PM 6723 in reply to 6720

    Re: order by

    step:
    Salut Am trecut de cateva zile la sql server 2005 (de la 2000) si am niste view uri care nu mai dau elementele in ordine desi au in definitie pus order by ul de exemplu : view =lstCategorii select denCategorie,CodCategorie from Categorii order by denCategorie il rulez din sql server 2005 si imi da o ordine aiurea.. daca fac select * from lstCategorii order by dencategorie atunci imi pune ok. aveti idee ce anume ar trebuie sa fac sau s-a uitat ceva cand s-a facut migrarea la 2005 ? multumesc

    Mda ... ce pot sa spun decit ca "order by" este suportat in view doar cu conditia sa fie TOP
    asa incit query-ul trebuia sa arate
    select top 100 percent denCategorie,CodCategorie from Categorii order by denCategorie

    Esti ABSOLUT sigur ca mergea in 2000 ? Poti da definitia view-ului ( create view ...)

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  02-09-2009, 2:00 PM 6724 in reply to 6723

    Re: order by

    da ... ce pot sa spun decit ca "order by" este suportat in view doar cu conditia sa fie TOP
    asa incit query-ul trebuia sa arate
    select top 100 percent denCategorie,CodCategorie from Categorii order by denCategorie

    Esti ABSOLUT sigur ca mergea in 2000 ? Poti da definitia view-ului ( create view ...)

    "TOP 100 percent" te pacaleste, dupa cum se vede din link-ul dat de Razvan.

  •  02-09-2009, 2:04 PM 6725 in reply to 6723

    Re: order by

    Da , era
    select "top 100 percent" denCategorie,CodCategorie from Categorii order by denCategorie

    nu mai stiu exact daca era si top 100 percent
    si mergea in 2000 pt ca nu m-a anuntat nici un user.


    Acum m-au anuntat ca nu mai este respectata ordinea ...

    multumesc pt replay
  •  02-09-2009, 2:12 PM 6726 in reply to 6725

    Re: order by

    Cred ca o sa pun order by in client
    si unde pot o sa mai fac un view intermediar

    multumesc pt posturi
  •  02-09-2009, 2:17 PM 6727 in reply to 6724

    Re: order by

    Diana:

    da ... ce pot sa spun decit ca "order by" este suportat in view doar cu conditia sa fie TOP
    asa incit query-ul trebuia sa arate
    select top 100 percent denCategorie,CodCategorie from Categorii order by denCategorie

    Esti ABSOLUT sigur ca mergea in 2000 ? Poti da definitia view-ului ( create view ...)

    "TOP 100 percent" te pacaleste, dupa cum se vede din link-ul dat de Razvan.


    OK, am inteles povestea din link ...Totusi, stau sa ma intreb de ce imi functiona OK pe 2000 ...

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  02-09-2009, 2:29 PM 6728 in reply to 6727

    Re: order by

    In SQL 2000 operatia "sort" nu era exclusa din "query plan", vezi http://sqlblog.com/blogs/tibor_karaszi/archive/2007/11/28/sorted-views.aspx.

    Kimberly Tripp semnaleaza un "workaround" de folosit cu atentie:

    http://sqlskills.com/blogs/Kimberly/post/SQL-2000-v-2005-Using-Top-100-Percent-in-a-View.aspx

  •  02-09-2009, 2:33 PM 6729 in reply to 6727

    Re: order by

    Dacă în view era "TOP 3 ... ORDER BY Something" şi faci un "SELECT * FROM View" fără să specifici ORDER BY-ul, atunci ultimul pas din execution plan este ordonarea, pentru a returna doar numărul de rânduri specificat. Cele 3 rânduri selectate (pe baza ordinii specificate), vor fi apare ordonate în rezultat (deoarece ordonarea este ultimul pas din execution plan şi ulterior nu mai sunt reordonate altfel).

    Dacă schimbăm "TOP 3" cu "TOP 100 PERCENT", SQL Server 2000 se comporta la fel (în sensul că ordona rândurile, iar apoi le returna pe toate), dar SQL Server 2005 ştie că "TOP 100 PERCENT" înseamnă să returneze toate rândurile şi nu se mai chinuie să le ordoneze degeaba (având în vedere că oricum ar fi fost returnate toate).

    Această optimizare a fost făcută în SQL Server 2005 pentru cazul când view-ul respectiv nu era folosit direct, ci era folosit într-un JOIN sau un alt query care implică alte tabele (de exemplu, "SELECT * FROM SomeTable WHERE id IN (SELECT id FROM OrderedView"). În acest caz, SQL Server 2000 făcea o sortare degeaba, iar SQL Server 2005 nu mai face această sortare.

    Răzvan
  •  02-09-2009, 2:39 PM 6730 in reply to 6728

    Re: order by

    Diana:

    In SQL 2000 operatia "sort" nu era exclusa din "query plan", vezi http://sqlblog.com/blogs/tibor_karaszi/archive/2007/11/28/sorted-views.aspx.

    Kimberly Tripp semnaleaza un "workaround" de folosit cu atentie:

    http://sqlskills.com/blogs/Kimberly/post/SQL-2000-v-2005-Using-Top-100-Percent-in-a-View.aspx


    Super! Sunt curios cite chestii NU mai sunt suportate ...dintre cele "neoficiale" ...

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  02-09-2009, 2:43 PM 6731 in reply to 6729

    Re: order by

    Nu recomand "workaround"-ul menţionat de Kimberly Tripp. În primul rând, chestia cu TOP 99.999 PERCENT nu funcţionează corect (atunci când ai mai mult de 100000 de rânduri), iar chestia cu "TOP 9223372036854775807" ar putea să nu funcţioneze într-o versiune viitoare de SQL Server, când o să optimizeze şi acest caz.

    Dacă e nevoie neapărat de comportamentul din SQL Server 2000 (ca o măsură temporară până se corectează aplicaţia), se poate instala hotfix-ul din KB 926292, iar apoi trebuie activat trace flag-ul 168 (aşa cum se menţionează în KB).

    Răzvan
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems