Potresti cambiare leggermente la semantica in questo modo:
SELECT ZipCode FROM
(
SELECT DISTINCT ZipCode = LEFT(tz.Zipcode, 5)
FROM dbo.TerritoryZip
) AS x
ORDER BY ZipCode;
In realtà non risolve il problema poiché la query è più dettagliata e non puoi ancora evitare di toccarla. La soluzione che hai già suggerito è migliore nella mia mente perché è più esplicita su ciò che sta accadendo.
Non per essere severo, ma se pensi di non essere in grado di "trovare tutte le istanze di questo tipo di SQL", allora come ti fidi dei tuoi test?
Suggerirei che mantenere la modalità 2000 non è la risposta ottimale. Il motivo è che ciò può causare l'interruzione di altre sintassi (ad esempio il modo in cui potresti chiamare le funzioni di gestione dinamica - vedi questo Post sul blog di Paul Randal
e il mio commento), corri anche il rischio di perpetuare il codice che dovrebbe essere corretto (ad es. *=
vecchio stile / =*
join validi in modalità compatibilità 2000, ma non saranno validi quando si passa da R2 2008 -> Denali, che non supporta compatibilità 2000).
Non esiste un'impostazione di "rigore" ma puoi votare per SET STRICT_CHECKS ON di Erland Sommarskog; suggerimento .