Możesz nieznacznie zmienić semantykę, wykonując to:
SELECT ZipCode FROM
(
SELECT DISTINCT ZipCode = LEFT(tz.Zipcode, 5)
FROM dbo.TerritoryZip
) AS x
ORDER BY ZipCode;
Nie rozwiązuje problemu tak naprawdę, ponieważ zapytanie jest bardziej szczegółowe i nadal nie można go uniknąć. Zasugerowana przez Ciebie poprawka jest dla mnie lepsza, ponieważ wyraźniej opisuje, co się dzieje.
Nie chcę być surowy, ale jeśli uważasz, że nie będziesz w stanie „znaleźć wszystkich wystąpień tego typu SQL”, to jak w ogóle ufasz swoim testom?
Sugerowałbym, że utrzymanie trybu 2000 nie jest optymalną odpowiedzią. Powodem jest to, że może to spowodować uszkodzenie innej składni (np. sposób, w jaki można wywoływać funkcje zarządzania dynamicznego - zobacz to Post na blogu Paula Randala
i mój komentarz do tego), istnieje również ryzyko utrwalenia kodu, który powinien zostać naprawiony (np. w starym stylu *=
/ =*
złączenia, które są ważne w trybie zgodności 2000, ale nie będą ważne po przejściu z wersji 2008 R2 -> Denali, która nie obsługuje zgodności z 2000).
Nie ma ustawienia „ścisłości”, ale możesz głosować na Erland Sommarskog SET STRICT_CHECKS ON; sugestia .