Sto leggendo alcuni vecchi codici sul lavoro e ho notato che ci sono diverse viste con una order by 1clausola. 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 BYin 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.
CHECKvincolo in a CREATE TABLEma in realtà non lo rispetta - non viene mai effettivamente verificato! La domanda è: questi prodotti SQL rispettano sempre le ORDER BYviste in ad es. Quando vengono utilizzati in una query che ha anche un ORDER BYordine? 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.