Du kan ændre semantikken lidt ved at gøre dette:
SELECT ZipCode FROM
(
SELECT DISTINCT ZipCode = LEFT(tz.Zipcode, 5)
FROM dbo.TerritoryZip
) AS x
ORDER BY ZipCode;
Løser egentlig ikke problemet, da forespørgslen er mere omfattende, og du stadig ikke kan undgå at røre ved den. Den rettelse, du allerede har foreslået, er bedre i mine øjne, fordi den er mere eksplicit om, hvad der foregår.
Ikke for at være hård, men hvis du ikke tror, du vil være i stand til at "finde alle forekomster af denne type SQL", hvordan stoler du så overhovedet på din test?
Jeg vil foreslå, at det ikke er det optimale svar at beholde 2000-tilstand. Årsagen er, at dette kan få anden syntaks til at bryde (f.eks. den måde, du kan kalde dynamiske administrationsfunktioner - se dette Paul Randal blogindlæg
og min kommentar til det), risikerer du også at fastholde kode, der bør rettes (f.eks. gammeldags *=
/ =*
joins, der er gyldige i 2000 compat-tilstand, men vil ikke være gyldige, når du går fra 2008 R2 -> Denali, som ikke understøtter 2000 compat).
Der er ingen "strenghedsindstilling", men du kan stemme på Erland Sommarskogs SET STRICT_CHECKS ON; forslag .