Je zou de semantiek enigszins kunnen veranderen door dit te doen:
SELECT ZipCode FROM
(
SELECT DISTINCT ZipCode = LEFT(tz.Zipcode, 5)
FROM dbo.TerritoryZip
) AS x
ORDER BY ZipCode;
Lost het probleem niet echt op, omdat de vraag uitgebreider is en je er nog steeds niet om kunt vermijden om hem aan te raken. De oplossing die je al hebt voorgesteld, is naar mijn mening beter omdat het explicieter is over wat er aan de hand is.
Niet om hard te zijn, maar als je denkt dat je niet "alle instanties van dit type SQL kunt vinden", hoe vertrouw je dan überhaupt op je testen?
Ik zou willen voorstellen dat het behouden van de 2000-modus niet het optimale antwoord is. De reden is dat hierdoor andere syntaxis kan breken (bijvoorbeeld de manier waarop u dynamische beheerfuncties kunt aanroepen - zie dit Paul Randal blogbericht
en mijn commentaar erop), loopt u ook het risico dat u code in stand houdt die moet worden gerepareerd (bijv. old-style *=
/ =*
joins die geldig zijn in de 2000 compat-modus, maar niet geldig zijn vanaf 2008 R2 -> Denali, die 2000 compat niet ondersteunt).
Er is geen "strikte" instelling, maar u kunt stemmen voor Erland Sommarskog's SET STRICT_CHECKS ON; suggestie .