了解SQL Server中的COMPATIBILITY_LEVEL

时间:2011-04-11 16:13:55

标签: sql-server database database-design compatibility

我了解在您的原生数据库之前将数据库设置为COMPATIBILITY_LEVEL会阻止使用功能。然而,情况似乎并非如此。见证以下SQL脚本:

CREATE DATABASE Foo
GO
USE Foo
GO
ALTER DATABASE Foo SET COMPATIBILITY_LEVEL = 80
GO

CREATE TABLE Bar
(
    Id UNIQUEIDENTIFIER NOT NULL,
    TestNvcMax NVARCHAR (MAX) NOT NULL, -- Arrived in SQL 2005
    TestDateTime2 DATETIME2 (7) NOT NULL -- Arrived in SQL 2008
)
GO

但这张桌子创造了完美 - 任何想法?我本以为某种错误信息或警告是合适的

3 个答案:

答案 0 :(得分:8)

在这里,您可以了解兼容级别80,90和100之间的差异。ALTER DATABASE Compatibility Level

显然新数据类型不受影响。我认为兼容性水平是为了使SQL Server“表现得像”旧版本,而不是阻止你做新的花哨的东西。

答案 1 :(得分:8)

BOL说:

  

仅提供兼容级别   部分向后兼容   早期版本的SQL Server。

此外:

  

新功能可能会起作用   较旧的兼容级别,但SET   选项可能需要调整。

我相信你的情况就是这样。

答案 2 :(得分:3)

我知道这是一篇旧帖子,但是对于那些像我一样在这里结束的人来说,更多的信息总是有用的。

在运行create table语句之前,新的兼容性也可能没有生效。

"数据库的新兼容性设置在发出USE数据库或使用该数据库作为默认数据库处理新登录时生效。" (https://msdn.microsoft.com/en-us/library/bb510680.aspx