Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

ORDER BY - tylko w view

Wszem i wobec wiadomo, że klauzula ORDER BY w view jest niedozwolona. W końcu view to "wirtualna tabela" i jako taka sama z siebie nie ma kolejności rekordów. Sytuacja zmieniła się z nadejściem SQL Server 7.0 i klauzulą TOP. Wtedy bowiem klauzula ORDER BY uzyskała znaczenie części filtra TOP. Oczywiście zdolność sortowania view niejako przy okazji pozostała, co wielu wykorzystywało do obchodzenia problemu nieobsługiwania ORDER BY. Ale to dłuższy temat...

Tymczasem ostatnio natrafiłem na ciekawy przypadek, gdzie do zastosowania ORDER BY paradoksalnie konieczne okazało się użycie view.

Wyobraźmy sobie, że chcemy wyświetlić z tabeli widoku systemowych 10 pierwszych i 10 ostatnich obiektów. Na pierwszy rzut oka nic prostrzego:



select top (10) name from sys.objects order by name

union all

select top (10) name from sys.objects order by name desc

 

A tu okazuje się, że niestety taka składnia nie jest obsługiwana. UNION dopuszcza tylko globalny ORDER BY zapominając jakoby, że w połączeniu z TOP staje się filtrem. Okazuje się jednak, że problem daje się obejść przez zastosowanie VIEW.



create view dbo.vwObiektyTrocheZPoczatkuIZKonca

as

select top (10) name from sys.objects order by name

union all

select top (10) name from sys.objects order by name desc

 

Ten widok założy się bez problemu i będzie działał zgodnie z oczekiwaniami.

 

Opublikowane 13 stycznia 2009 14:10 przez mad
Filed under: , , , , ,

Komentarze:

# Wiadomo??ci ze ??wiata IT » Blog Archive » C2C: Konferencja dla programist??w i bazodanowc??w ju?? w sobot??

Komentarze anonimowe wyłączone