Почему новый T-SQL SQL Server 2008 работает с базой данных в режиме совместимости 80? - PullRequest
4 голосов
/ 28 сентября 2010

Экспериментируя с новыми возможностями T-SQL, я столкнулся с загадкой. Вот некоторый новый синтаксис, поддерживаемый SQL 2008, и я ожидаю, что он будет работать с базами данных, установленными для режима совместимости 100 (т. Е. 2008), и не будет работать для режима Compat 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

Ответы [ 3 ]

2 голосов
/ 28 сентября 2010

Я тоже это заметил и обнаружил этот оператор в MSDN :

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

Режим совместимости влияет на «определенное» поведение, а не на ВСЕ поведения.Подробнее см. Документацию ALTER DATABASE .

1 голос
/ 28 сентября 2010

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

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

0 голосов
/ 28 сентября 2010

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

sp_dbcmptlevel 'MDS'

Возвращает ли она 80?

...