Par défaut la ligne de commande dans la requête SELECT - SQL Server 2008 vs SQL 2012

Notre équipe a récemment mis à jour notre base de données à partir de SQL Server 2008, SQL Server 2012. Une modification de rupture que nous avons remarquée est dans l'ordre par défaut des lignes retournées par la requête SELECT, c'est à dire quand une clause ORDER BY explicite n'est pas spécifié.

Comme par MSDN, SQL Server 2012 ne permet pas de garantir l'ordre des lignes retournées à moins d'une clause ORDER BY est spécifié.

Nous avons 2500+ des procédures stockées sur 5 bases de données qui ont des instructions SELECT sans une clause ORDER BY, et il sera un important effort d'ajouter la clause ORDER BY manuellement pour reproduire le comportement de SQL Server 2008. Est-il un paramètre ou un moyen plus rapide de faire cela?

L'autre option, qui n'a pas été explorée, est de revenir à SQL Server 2008. La difficulté serait-ce?

Il n'y a pas une telle chose comme le "défaut de ligne de commande". Des lignes dans une table relationnelle sont PAS triés. Moins vous spécifiez un order by le SGBD est libre de retourner dans aucun commander, il semble en forme. Votre code a été rompu dès le début. La seule solution sensée à votre problème est de mordre la balle et de modifier le code pour utiliser un order by Vous avez de la chance, ce bug n'a pas montré plus tôt.
Bien SQL 2008 est le même, il n'est pas garanti "par défaut" ligne de commande
Essayez d'utiliser clustured et non clustured indice, si vous avez déjà une clé primaire dans la table, vous n'avez pas à vous soucier de clustured en tant que par défaut de la clé primaire est clustured index.
ORDER BY ne doit être pertinente dans SELECT requêtes. (à moins que vous faire des choses vraiment stupides comme LIMIT 1 dans les sous-requêtes, ou de sortir de curseur boucles)
Pourquoi l'utilisation de LIMIT une chose stupide, @joop?

OriginalL'auteur Channs | 2014-10-07