4 Stimmen

Warum funktioniert der neue T-SQL von SQL Server 2008 im Datenbankkompatibilitätsmodus 80?

Beim Experimentieren mit neuen Funktionen von T-SQL bin ich auf ein Rätsel gestoßen. Hier ist eine neue Syntax, die von SQL 2008 unterstützt wird, und ich würde erwarten, dass sie für Datenbanken funktioniert, die auf Kompatibilitätsmodus 100 (d. h. 2008) eingestellt sind, und nicht für den Kompatibilitätsmodus 80 (d. h. 2000). Trotzdem funktioniert dies für eine Datenbank, die auf den Kompatibilitätsmodus SQL SERVER 2000 eingestellt ist, in einer SQL 2008-Instanz der Standard Edition:

use MDS    -- Diese DB hat den Kompatibilitätsmodus 80
go
CREATE TABLE dbo.Employees
(
Name VARCHAR(50) NULL,
Email VARCHAR(50) NULL,
Salary money NULL
) 
INSERT INTO dbo.Employees(Name, Email, Salary)
VALUES('Scott', 'scott@example.com', 50000.00),
  ('Jisun', 'jisun@example.com', 225000.00),
  ('Alice', 'al@example.com', 75000.00),
  ('Sam', 'sam@example.com', 45000.00)

SELECT * FROM dbo.Employees  
drop table dbo.Employees

2voto

devio Punkte 36064

Ich habe das auch bemerkt und habe diese Aussage auf MSDN gefunden diesen Hinweis auf MSDN:

Legt bestimmte Datenbankverhaltensweisen fest, die mit der angegebenen Version von SQL Server kompatibel sind.

Der Kompatibilitätsmodus wirkt sich auf "bestimmte" Verhaltensweisen aus und nicht auf ALLE Verhaltensweisen. Details finden Sie in der ALTER DATABASE-Dokumentation.

1voto

Philip Kelley Punkte 38051

Die Kompatibilitätsmoduseinstellung wird verwendet, um bestimmte relativ obskure (meiner Meinung nach) Aspekte des Engine-Verhaltens zu kontrollieren. Es blockiert nicht die Verwendung von Erweiterungen der T-SQL-Sprache auf Datenbanken, die von früheren Versionen migriert wurden - zum Beispiel unterstützt eine Datenbank, die von SQL 2000 gesichert und auf SQL 2008 wiederhergestellt wurde, CTEs und die neuen INSERT-Anweisungen mit mehreren Werten.

Die genauen Details darüber, was vom Datenbank-Kompatibilitätsmodus gesteuert wird, sind in mehreren Artikeln in Books Online versteckt; dies ist ein guter Ausgangspunkt für die Recherche dazu.

0voto

Abe Miessler Punkte 78979

Ich sehe nicht, wie das im Kompatibilitätsmodus 80 funktionieren könnte. Versuchen Sie, diese Zeile hinzuzufügen, bevor Sie Ihre Tabelle erstellen:

sp_dbcmptlevel 'MDS'

Gibt es 80 zurück?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X