Czytam stary kod w pracy i zauważyłem, że istnieje kilka widoków z order by 1
klauzulą. Co to daje?
Przykład:
Create view v_payment_summary AS
SELECT A.PAYMENT_DATE,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME CONDITION) AS SUM_X,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME OTHER CONDITION) AS SUM_Y
FROM payment A
ORDER BY 1;
ORDER BY
in a VIEW
. Standardowy SQL na to nie pozwala. SQL Server zakazał tego od 2005 roku. W przypadku implementacji SQL, które na to pozwalają, zachowanie jest w dużej mierze nieudokumentowane i sprzeczne z intuicją. Innymi słowy, zdecydowanie należy tego unikać.
TOP
jest obecny, a SSMS uwielbia dodawać TOP 100 PERCENT
.
CHECK
ograniczenie w a, CREATE TABLE
ale w rzeczywistości go nie honoruje - w rzeczywistości nigdy nie jest sprawdzane! Pytanie brzmi, czy te produkty SQL zawsze cześćORDER BY
w widokach np użyte w zapytaniu, które również ma ORDER BY
to dostać któryś dwukrotnie? Czy w ogóle dokumentują zachowanie, czy też musisz spojrzeć na plany wykonania, aby to rozpracować? Myślę, że znamy odpowiedzi;)
ORDER BY 1
... używając sztuczki z zastosowaniem krzyżowym, w której potrzebujesz pustego aliasu. Niestety kod np. Jest zbyt duży na komentarz, więc zamieściłem go jako odpowiedź poniżej FYI.