Du kan ändra semantiken något genom att göra så här:
SELECT ZipCode FROM
(
SELECT DISTINCT ZipCode = LEFT(tz.Zipcode, 5)
FROM dbo.TerritoryZip
) AS x
ORDER BY ZipCode;
Löser inte problemet egentligen eftersom frågan är mer utförlig och du fortfarande inte kan undvika att röra den. Den korrigering du redan har föreslagit är bättre i mina ögon eftersom den är mer tydlig om vad som pågår.
Inte för att vara hård, men om du inte tror att du kommer att kunna "hitta alla instanser av den här typen av SQL" hur litar du då på dina tester?
Jag skulle föreslå att att behålla 2000-läget inte är det optimala svaret. Anledningen är att detta kan göra att annan syntax går sönder (t.ex. hur du kan anropa dynamiska hanteringsfunktioner - se det här Paul Randal blogginlägg
och min kommentar till det), riskerar du också att vidmakthålla kod som borde åtgärdas (t.ex. gammaldags *=
/ =*
anslutningar som är giltiga i 2000 compat-läge, men kommer inte att vara giltiga när du går från 2008 R2 -> Denali, som inte stöder 2000 compat).
Det finns ingen "striktighet"-inställning men du kan rösta på Erland Sommarskogs SET STRICT_CHECKS ON; förslag .