与T-SQL的新特性做实验,我碰到的一个难题。下面是2008年SQL支持一些新的语法,我会期待它工作在兼容模式100(即2008年),而不是工作设置兼容模式80(即2000年)的数据库。然而,这个作品对于SQL Server 2000兼容模式下数据库上一套标准版的SQL 2008实例:

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
有帮助吗?

解决方案

在兼容模式设置用于控制发动机databae行为的某些相对模糊(IMHO)方面。它不会阻止或防止利用扩展的T-SQL语言的从从以前的版本迁移的数据库使用 - 例如,数据库从SQL 2000备份和恢复2008年的SQL支持热膨胀系数和新的多值INSERT语句。

什么是数据库兼容模式控制的实际细节都埋在联机丛书几篇文章; 是一个很好的起点为研究此。

其他提示

我注意到了这一点过了,发现 MSDN上这样的说法:

  

设定某些数据库行为是   与指定的版本兼容   的SQL Server。

在兼容模式影响“某些”的行为,而不是所有的行为。请参阅 ALTER DATABASE文档获取详细信息。

我不明白这是如何在兼容模式80.尝试加入这一行的工作在你创建表之前:

sp_dbcmptlevel 'MDS'

是否返回80?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top