Sto leggendo alcuni vecchi codici sul lavoro e ho notato che ci sono diverse viste con una order by 1
clausola. Cosa compie questo?
Esempio:
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
. SQL standard non lo consente. SQL Server lo mette fuori legge dal 2005. Per l'implementazione SQL che lo consente, il comportamento è ampiamente privo di documenti e non intuitivo. In altre parole, sicuramente da evitare.
TOP
è presente e SSMS ama aggiungere TOP 100 PERCENT
.
CHECK
vincolo in a CREATE TABLE
ma in realtà non lo rispetta - non viene mai effettivamente verificato! La domanda è: questi prodotti SQL rispettano sempre le ORDER BY
viste in ad es. Quando vengono utilizzati in una query che ha anche un ORDER BY
ordine? Documentano persino il comportamento o devi esaminare i piani di esecuzione per risolverlo? Penso che conosciamo le risposte;)
ORDER BY 1
... usando un trucco cross-apply in cui si desidera un alias vuoto. Sfortunatamente il codice, ad esempio, è troppo grande per un commento, quindi l'ho pubblicato come risposta sotto FYI.