Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Migration von SQL Server 2000 auf 2008 – ORDER BY-Problem bei Verwendung von DISTINCT

Sie könnten die Semantik leicht ändern, indem Sie Folgendes tun:

SELECT ZipCode FROM 
(
  SELECT DISTINCT ZipCode = LEFT(tz.Zipcode, 5)
    FROM dbo.TerritoryZip
) AS x
ORDER BY ZipCode;

Löst das Problem nicht wirklich, da die Abfrage ausführlicher ist und Sie es immer noch nicht vermeiden können, sie zu berühren. Die Lösung, die Sie bereits vorgeschlagen haben, ist meiner Meinung nach besser, da sie deutlicher beschreibt, was vor sich geht.

Um nicht hart zu sein, aber wenn Sie nicht glauben, dass Sie "alle Instanzen dieses SQL-Typs finden" können, wie vertrauen Sie dann Ihren Tests überhaupt?

Ich würde vorschlagen, dass das Beibehalten des 2000-Modus nicht die optimale Antwort ist. Der Grund dafür ist, dass dies dazu führen kann, dass andere Syntax bricht (z. B. die Art und Weise, wie Sie dynamische Verwaltungsfunktionen aufrufen könnten – siehe dies Blogbeitrag von Paul Randal und mein Kommentar dazu), laufen Sie auch Gefahr, Code fortzusetzen, der repariert werden sollte (z. B. *= im alten Stil). / =* Joins, die im 2000-Kompatibilitätsmodus gültig sind, aber nicht gültig sind, wenn Sie von 2008 R2 -> Denali wechseln, das 2000-Kompatibilität nicht unterstützt).

Es gibt keine „Strictness“-Einstellung, aber Sie können für Erland Sommarskogs SET STRICT_CHECKS ON stimmen; Vorschlag .