欢迎您访问我爱IT技术网,今天小编为你分享的电脑教程是站长建站系列之:【升级数据库并改变数据库兼容性级别】,下面是详细的分享!
升级数据库并改变数据库兼容性级别
问题:当我们利用数据库备份或者数据库修复,或者是detach和attach数据库的方法来升级旧版本SQL Server的数据库时,数据库的兼容性级别并不会自动随之升级,因此这时候数据库运行起来还是跟使用旧版本的SQL Server一样。虽然总体来说这并不会造成很大的问题,但是如果你不相应升级你的数据库兼容性级别的话,你就没有办法利用新版本SQL Server的一些新特性。怎么样去检测你的数据库兼容性级别,怎么样去改变数据库兼容性级别,还有SQL Server 2005和旧版本SQL Server之间有什么区别呢?
解答:
你要做的第一件事是检查你的数据库运行的兼容性级别。像问题中所说的那样,在利用数据库备份或者数据库修复,或者是detach和attach数据库的方法来升级旧版本SQL Server的数据库,其兼容性级别不用自动随之升级,因此你需要检查每一个数据库并对其做出相应的改动。
尽管SQL Server的版本命名已经改成SQL Server 2000和2005,并且即将推出2008版,但是其内在的版本号的传承依然不变。以下是SQL Server各版本相应的兼容性级别:
60=SQL Server 6.0 65=SQL Server 6.5 70=SQL Server 7.0 80=SQL Server 2000 90=SQL Server 2005识别数据库的兼容性级别
要检测数据库的兼容性级别,你可以使用以下的方法:
使用SQL Server Management Studio,右击数据库,选择属性“Properties”,然后查看选项“Options”页,就可以查看各个数据库的兼容性级别,如下图所示:

另一个方法就是使用sp_helpdb命令,这样你就可以马上获得所有数据库的信息:
EXEC sp_helpdb

或者直接从sys.databases catalog目录里运用select命令来获得所有数据库的信息。
SELECT * FROM sys.databases
新建数据库的兼容性级别
当你执行CREATE DATABASE语句创建数据库时,并不能直接选择你想要的兼容性级别。这时新建数据库的兼容性级别为你所用的数据库模板的兼容性级别。
下面是新建数据库CREATE DATABASE命令的例子,但是其中并没有选择数据库兼容性级别的选项。
| CREATE DATABASE [test] ON PRIMARY ( NAME = N'test', FILENAME = N'Z:\SQLData\test.mdf' , SIZE = 2048KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'test_log', FILENAME = N'Y:\SQLData\test3_log.ldf' , SIZE = 3072KB , FILEGROWTH = 10%) GO |
如果是使用SQL Server Management Studio创建数据库的话,你可以在“Options”卡片里修改数据库的兼容性级别,如下图所示:

我们可以使用“Script”脚本,如下图所示,SQL Server执行CREATE DATABASE语句,然后执行“sp_dbcmptlevel”就可以把数据库兼容性级别设置为80.
| CREATE DATABASE [test] ON PRIMARY ( NAME = N'test', FILENAME = N'Z:\SQLData\test.mdf' , SIZE = 2048KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'test_log', FILENAME = N'Y:\SQLData\test3_log.ldf' , SIZE = 3072KB , FILEGROWTH = 10%) GO EXEC dbo.sp_dbcmptlevel @dbname=N'test', @new_cmptlevel=80 GO |
改变数据库兼容性级别
当你已经识别了数据库的兼容性级别,可以使用sp_dbcmptlevel系统存储过程来把数据库的兼容性级别改成你想要的级别。该命令的语法如下:
| sp_dbcmptlevel [ [ @dbname=] name ] [ , [ @new_cmptlevel=] version ] --to change to level 80 --to change to level 90 --or sp_dbcmptlevel 'test', '90' |
以下是不同兼容性级别对数据库运行的几点影响。
|
兼容性级别为80以下 |
兼容性级别设置为90 |
有影响的可能性 |
|
FROM从句的锁定提示,不一定要使用WITH关键词。 |
只有在以WITH关键词指定提示时,FROM从句才支持表提示,只有少数例外情况。 |
高度 |
|
外部连接支持使用*=and=*操作符,会出现警告信息。 |
不支持此类操作符,应该使用OUTER JOIN关键词。 |
高度 |
|
触发器中允许使用SET XACT_ABORT OFF。 |
触发器中不允许使用SET XACT_ABORT OFF。 |
中等 |
另外,每个新版本的兼容性级别都有其禁用关键词。下面列出了SQL Server 2005的禁用关键词。
|
兼容性级别设置 |
禁用关键词 |
|
90 |
PIVOT, UNPIVOT, REVERT, TABLESAMPLE |
|
80 |
COLLATE, FUNCTION, OPENXML |
|
70 |
BACKUP, CONTAINS, CONTAINSTABLE, DENY, FREETEXT, FREETEXTTABLE, PERCENT, RESTORE, ROWGUIDCOL, TOP |
|
65 |
AUTHORIZATION, CASCADE, CROSS, DISTRIBUTED, ESCAPE, FULL, INNER, JOIN, LEFT, OUTER, PRIVILEGES, RESTRICT, RIGHT, SCHEMA, WORK |
如果你的数据库中使用了以上相应级别中禁用的关键词,那么该执行命令就会失效。要使命令正常执行,你可以在给关键词加上方括号或双引号,例如 [PIVOT] 或"PIVOT"。
总结
数据库兼容性级别的设置是利于SQL Server定义某些新特性的使用。现在你已经知道如何检测和改变数据库的兼容性级别,可以放心地把数据库移植到新版本的SQL Server里去。而且如果需要的话,还可以把已经改变的级别再改回去,因此如果你发现改变了数据库的兼容性级别之后出现问题,你可以把兼容性级别改回原来的值。
另外,有一些特性只有在数据库兼容性级别设置为最新版本后才能运行,因此如果想要充分利于SQL Server的所有特性和功能,你需要设置为最新的版本级别。
以上就是关于升级数据库并改变数据库兼容性级别的手机问答知识分享,更多电脑教程请移步到>>电脑教程频道。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
