Je lis un vieux code au travail et j'ai remarqué qu'il y a plusieurs vues avec une order by 1
clause. Qu'est-ce que cela accomplit?
Exemple:
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
dans un VIEW
. Le SQL standard ne le permet pas. SQL Server l'interdit depuis 2005. Pour les implémentations SQL qui le permettent, le comportement est largement non documenté et contre-intuitif. En d'autres termes, à éviter définitivement.
TOP
est présent, et SSMS aime ajouter TOP 100 PERCENT
.
CHECK
contrainte dans a CREATE TABLE
mais il ne l'honorera pas réellement - il n'est jamais vérifié! La question est la suivante: est-ce que ces produits SQL respectent toujours les ORDER BY
vues in, par exemple lorsqu'ils sont utilisés dans une requête qui comporte également un ORDER BY
trié deux fois? Documentent-ils même le comportement ou devez-vous regarder les plans d'exécution pour le résoudre? Je pense que nous connaissons les réponses;)
ORDER BY 1
... en utilisant une astuce d'application croisée où vous voulez un alias vide. Malheureusement, le code, par exemple, est trop gros pour un commentaire, je l'ai donc posté en tant que réponse ci-dessous FYI.