none
Frage zu COMPUTE und Server-Version RRS feed

  • Frage

  • Hallo,

    ich habe hier zwei Konstellationen:

    1. Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) // Datenbank im Kompatibilätslevel 100 (SQL-Server 2008)

    2. Microsoft SQL Server 2019 (RTM-CU5) (KB4552255) - 15.0.4043.16 (X64) // Datenbank im Kompatibilätslevel 100 (SQL-Server 2008)

    Ich bin auf einer SQL-Konsole mit beiden Servern/Datenbanken verbunden (im Wechsel) und probiere ein Statement, welches das Schlüsselwort COMPUTE enthält. In Konstellation 1 funktioniert es, in 2 nicht. (Fehlermeldung "Falsche Syntax in der Nähe des compute-Schlüsselworts.") Warum ist das so?

    Mir ist schon klar, dass COMPUTE obsolete ist. Ich hätte aber nicht gedacht, dass obwohl für beide Datenbanken der gleiche Kompatibilätslevel vorliegt, es zu diesem unterschiedlichen Verhalten kommt. Kann mir das bitte jemand erklären. Vielen Dank schon mal.

    Franz

    Dienstag, 14. Juli 2020 08:42

Antworten

  • Hallo Franz,

    ganz so einfach ist es leider nicht zu beantworten: 

    ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL)

    Zitate:

    1.) Die Einstellung Datenbank-Kompatibilitätsgrad bietet Abwärtskompatibilität mit früheren Versionen von SQL Server in Bezug auf das Verhalten von Transact-SQL und der Abfrageoptimierung. Dies gilt allerdings ausschließlich für die angegebene Datenbank und nicht für den gesamten Server.

    2.) Nicht mehr unterstützte Funktionen, die in einer bestimmten SQL Server-Version eingeführt wurden, werden durch den Kompatibilitätsgrad nicht geschützt. Dies bezieht sich auf Funktionalität, die aus der SQL Server-Datenbank-Engine entfernt wurde.

    Das Verhalten des Optimizers wird also beeinflusst, da sich auch bei gleichen Statements die Verarbeitung ändern kann. Nicht mehr unterstützte Syntax kann aber nicht wieder aktiviert werden.

    HTH!


    Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu

    • Als Antwort markiert FranzMoll Montag, 20. Juli 2020 14:12
    Montag, 20. Juli 2020 11:24

Alle Antworten

  • Hallo Franz,

    COMPUTE galt lange als eine abgekündigte Funktion, man soll stattdessen ROLLUP verwenden.

    Siehe SQL Server, Deprecated Features Object, COMPUTE wurde bereits in der Version 2012 entfernt, deswegen hat es auch nichts mit dem Kompatibilitätslevel der Datenbank zu tun.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 14. Juli 2020 09:27
  • Hallo Olaf,

    vielen Dank für Deine Antwort. Ich dachte allerdings, dass der Kompatibilitätslevel auch dafür zuständig ist, SQL auszuführen, dass auf der (höheren) Version des Servers, auf dem die Datenbank liegt nicht mehr geht. Wenn dem nicht so ist, dann kann ich doch gleich die Datenbank auf die Serverversion upgraden, oder?

    Bye

    Franz

    Dienstag, 14. Juli 2020 09:38
  • Hallo Franz,

    ganz so einfach ist es leider nicht zu beantworten: 

    ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL)

    Zitate:

    1.) Die Einstellung Datenbank-Kompatibilitätsgrad bietet Abwärtskompatibilität mit früheren Versionen von SQL Server in Bezug auf das Verhalten von Transact-SQL und der Abfrageoptimierung. Dies gilt allerdings ausschließlich für die angegebene Datenbank und nicht für den gesamten Server.

    2.) Nicht mehr unterstützte Funktionen, die in einer bestimmten SQL Server-Version eingeführt wurden, werden durch den Kompatibilitätsgrad nicht geschützt. Dies bezieht sich auf Funktionalität, die aus der SQL Server-Datenbank-Engine entfernt wurde.

    Das Verhalten des Optimizers wird also beeinflusst, da sich auch bei gleichen Statements die Verarbeitung ändern kann. Nicht mehr unterstützte Syntax kann aber nicht wieder aktiviert werden.

    HTH!


    Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu

    • Als Antwort markiert FranzMoll Montag, 20. Juli 2020 14:12
    Montag, 20. Juli 2020 11:24