Можете леко да промените семантиката, като направите следното:
SELECT ZipCode FROM
(
SELECT DISTINCT ZipCode = LEFT(tz.Zipcode, 5)
FROM dbo.TerritoryZip
) AS x
ORDER BY ZipCode;
Всъщност не решава проблема, тъй като заявката е по-подробна и все още не можете да избегнете докосването й. Поправката, която вече предложихте, според мен е по-добра, защото е по-ясно какво се случва.
За да не бъда груб, но ако не смятате, че ще можете да „намерите всички екземпляри на този тип SQL“, тогава как изобщо се доверявате на вашето тестване?
Бих предположил, че поддържането на режим 2000 не е оптималният отговор. Причината е, че това може да доведе до нарушаване на друг синтаксис (напр. начинът, по който можете да извиквате функции за динамично управление - вижте това Публикация в блога на Пол Рандал
и моя коментар към него), вие също рискувате да запазите код, който трябва да бъде коригиран (напр. *=
в стар стил / =*
присъединявания, които са валидни в режим на съвместимост с 2000, но няма да са валидни, когато преминете от 2008 R2 -> Denali, който не поддържа съвместимост с 2000).
Няма настройка за „стриктност“, но можете да гласувате за SET STRICT_CHECKS ON на Erland Sommarskog; предложение .