Vous pouvez modifier légèrement la sémantique en procédant comme suit :
SELECT ZipCode FROM
(
SELECT DISTINCT ZipCode = LEFT(tz.Zipcode, 5)
FROM dbo.TerritoryZip
) AS x
ORDER BY ZipCode;
Ne résout pas vraiment le problème car la requête est plus détaillée et vous ne pouvez toujours pas éviter de la toucher. Le correctif que vous avez déjà suggéré est meilleur dans mon esprit car il est plus explicite sur ce qui se passe.
Sans vouloir être dur, mais si vous pensez que vous ne serez pas en mesure de "trouver toutes les instances de ce type de SQL", alors comment faites-vous confiance à vos tests ?
Je dirais que garder le mode 2000 n'est pas la réponse optimale. La raison en est que cela peut entraîner la rupture d'une autre syntaxe (par exemple, la façon dont vous pouvez appeler des fonctions de gestion dynamiques - voir this Article de blog de Paul Randal
et mon commentaire), vous courez également le risque de perpétuer du code qui devrait être corrigé (par exemple, *=
à l'ancienne / =*
jointures valides en mode de compatibilité 2000, mais qui ne le seront plus lorsque vous passerez de 2008 R2 -> Denali, qui ne prend pas en charge la compatibilité 2000).
Il n'y a pas de paramètre de "strictité", mais vous pouvez voter pour SET STRICT_CHECKS ON d'Erland Sommarskog ; proposition .