Anda dapat sedikit mengubah semantik dengan melakukan ini:
SELECT ZipCode FROM
(
SELECT DISTINCT ZipCode = LEFT(tz.Zipcode, 5)
FROM dbo.TerritoryZip
) AS x
ORDER BY ZipCode;
Tidak benar-benar menyelesaikan masalah karena kueri lebih bertele-tele dan Anda masih tidak dapat menghindari menyentuhnya. Perbaikan yang Anda sarankan lebih baik menurut saya karena lebih eksplisit tentang apa yang sedang terjadi.
Bukan untuk kasar, tetapi jika Anda tidak berpikir Anda akan dapat "menemukan semua contoh jenis SQL ini" lalu bagaimana Anda mempercayai pengujian Anda sama sekali?
Saya akan menyarankan bahwa mempertahankan mode 2000 bukanlah jawaban yang optimal. Alasannya adalah ini dapat menyebabkan sintaks lain rusak (misalnya cara Anda memanggil fungsi manajemen dinamis - lihat ini Postingan blog Paul Randal
dan komentar saya untuk itu), Anda juga berisiko mengabadikan kode yang harus diperbaiki (mis. *=
gaya lama / =*
gabungan yang valid dalam mode compat 2000, tetapi tidak akan valid saat Anda beralih dari 2008 R2 -> Denali, yang tidak mendukung 2000 compat).
Tidak ada setelan "ketat" tetapi Anda dapat memilih ATUR STRICT_CHECKS Erland Sommarskog; saran .