对于所有 SQL Server 2008 安装默认的兼容级别嘟为 100。除非 model 数据库级别有更低的兼容级别否则 SQL Server 2008 中创建的数据库级别会设置为该级别。将数据库级别从 SQL Server 的任何早期版本升级到 SQL Server 2008 时如果数據库级别的兼容级别不在 80 以下,则该数据库级别将保留其现有的兼容级别升级兼容级别低于 80 的数据库级别会将数据库级别的兼容级别设置为 80。这既适用于系统数据库级别也适用于用户数据库级别。使用 ALTER DATABASE 可更改数据库级别的兼容级别若要查看数据库级别的当前兼容级别,请查询 sys.databases 目录视图中的 compatibility_level 列
利用兼容级别获得向后兼容
兼容级别只影响指定数据库级别的行为,而不影响整个服务器的行为兼容级别只實现与 SQL Server 的早期版本保持部分向后兼容。通过将兼容级别用作临时性的迁移辅助工具可解决相关兼容级别设置控制的行为之间存在的版本差异问题。如果现有 SQL Server 应用程序受到 SQL Server 2008 中行为差异的影响请对该应用程序进行转换,使之能正常运行然后使用 ALTER
DATABASE 将兼容级别更改为 100。数据库級别的新兼容性设置将在该数据库级别下次成为当前数据库级别(无论是在登录时作为默认数据库级别还是在 USE 语句中指定)时生效
如果茬用户连接到数据库级别时更改兼容级别,可能会使活动查询产生不正确的结果集例如,如果在编写查询计划时兼容级别发生更改则編写后的计划可能同时基于旧的和新的兼容级别,从而造成计划不正确并可能导致结果不准确。此外如果将计划放在计划缓存中供后續的查询重用,则问题可能更加复杂为了避免查询结果不准确,建议您使用以下过程来更改数据库级别的兼容级别:
要为其更改兼容级別的数据库级别的名称数据库级别名称必须符合标识符的规则。name 的数据类型为 sysname默认值为 NULL。
0(成功)或 1(失败)
如果未指定任何参数或未指定 name 参数则 sp_dbcmptlevel 将返回错误。
如果指定 name 但未指定 version则 数据库级别引擎将返回一条消息,显示指定数据库级别的当前兼容级别
只有数据库級别所有者、sysadmin 固定服务器角色和 db_owner 固定数据库级别角色的成员(前提是您要更改当前数据库级别)才能执行此过程。