Почему новый T-SQL SQL Server 2008 работает с базой данных в режиме совместимости 80?

StackOverflow https://stackoverflow.com/questions/3813351

Вопрос

Экспериментируя с новыми функциями T-SQL, я столкнулся с головоломкой.Вот некоторый новый синтаксис, поддерживаемый SQL 2008, и я бы ожидал, что он будет работать с базами данных, настроенными на режим совместимости 100 (т. Е.2008) и не работает для режима совместимости 80 (т. е.2000).Тем не менее, это работает для базы данных, установленной для режима совместимости SQL SERVER 2000 в экземпляре SQL 2008 Standard edition:

use MDS    -- this db is compat mode 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
Это было полезно?

Решение

Настройка режима совместимости используется для управления некоторыми относительно неясными (imho) аспектами поведения движка databae.Это не блокирует и не предотвращает использование расширений языка T-SQL в базах данных, перенесенных из предыдущих версий - например, база данных, созданная из SQL 2000 и восстановленная в SQL 2008, будет поддерживать CTE и новые операторы вставки нескольких значений.

Фактические детали того, что контролируется режимом совместимости с базой данных, описаны в нескольких статьях в книгах онлайн; это это хорошая отправная точка для исследования этого вопроса.

Другие советы

Я тоже это заметил, и нашел Это утверждение на MSDN:

Устанавливает определенное поведение базы данных для совместимости с указанной версией SQL Server.

Режим совместимости влияет на «определенные» поведение, а не все поведения. Увидеть ALL DOANABY DOCUSTORY для деталей.

Я не вижу, как это может работать в режиме Compat 80. Попробуйте добавить эту строку перед созданием таблицы:

sp_dbcmptlevel 'MDS'

Это вернет 80?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top