数据库语句高级应用之修改数据库兼容版本

数据库在项目开发中几乎是必不可少的元素,sql Server 相信大家都特别熟悉吧,那么是否遇到过这样一个问题呢:

在分析数据库或者部署数据库的时候,出现了数据库不兼容的问题。拿到的是08或者12版本的数据库,结果部署的服务器只装有05或08的sqlserver,一个小小的兼容问题是不是很让有头疼啊。

通用的解决方案是:导出数据库脚本,备份数据库。然后在Sql Server 2005或08的服务器上创建数据库,然后通过备份文件还原数据。这样太麻烦了。既然sql的功能如此强大,肯定有考虑到兼容性的问题,如果修改一下兼容性就会省好多时间,那多方便呀。在网上找了半天,这个方法还真有。

修改数据库兼容版本

语法
ALTER DATABASE database_name 
SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 |110 }
 
参数
database_name 
要修改的数据库的名称。

COMPATIBILITY_LEVEL { 80 | 90 | 100 |110}
要使数据库与之兼容的 SQL Server 版本。该值必须为下列值之一:
 = SQL Server 2000 
 = SQL Server 2005   
 = SQL Server 2008   
 = SQL Server 2012 

备注
对于所有 SQL Server 2012 安装,默认的兼容级别都为 110。除非 model 数据库有更低的兼容级别,否则 SQL Server 2012 中创建的数据库会设置为该级别。将数据库从 SQL Server 的任何早期版本升级到 SQL Server 2012 时,如果数据库的兼容级别不在 80 以下,则该数据库将保留其现有的兼容级别。升级兼容级别低于 80 的数据库会将数据库的兼容级别设置为 80。这既适用于系统数据库,也适用于用户数据库。使用 ALTER DATABASE 可更改数据库的兼容级别。若要查看数据库的当前兼容级别,请查询
sys.databases 目录视图中的 compatibility_level 列。

利用兼容级别获得向后兼容
兼容级别只影响指定数据库的行为,而不影响整个服务器的行为。兼容级别只实现与 SQL Server 的早期版本保持部分向后兼容。通过将兼容级别用作临时性的迁移辅助工具,可解决相关兼容级别设置控制的行为之间存在的版本差异问题。如果现有 SQL Server 应用程序受到 SQL Server 2012 中行为差异的影响,请对该应用程序进行转换,使之能正常运行。然后使用 ALTER DATABASE 将兼容级别更改为 110。数据库的新兼容性设置将在该数据库下次成为当前数据库(无论是在登录时作为默认数据库还是在 USE
语句中指定)时生效。

最佳实践
如果在用户连接到数据库时更改兼容级别,可能会使活动查询产生不正确的结果集。例如,如果在编写查询计划时兼容级别发生更改,则编写后的计划可能同时基于旧的和新的兼容级别,从而造成计划不正确,并可能导致结果不准确。此外,如果将计划放在计划缓存中供后续的查询重用,则问题可能更加复杂。为了避免查询结果不准确,建议您使用以下过程来更改数据库的兼容级别:

. 通过使用 ALTER DATABASE SET SINGLE_USER,将数据库设置为单用户访问模式。
. 更改数据库的兼容级别。
. 通过使用 ALTER DATABASE SET MULTI_USER,将数据库设为多用户访问模式。
   有关设置数据库访问模式的详细信息,请参阅 ALTER DATABASE (Transact-SQL)。

--获取数据库兼容级别
 SELECT name ,compatibility_level ,recovery_model_desc FROM sys.databases WITH(NOLOCK)

 --将用户设置为单用户访问模式
 ALTER DATABASE test SET SINGLE_USER

 --修改数据库的兼容级别
 ALTER DATABASE TEST
 SET COMPATIBILITY_LEVEL = 90
 --or
 EXEC sp_dbcmptlevel TEST, 90;
 GO

 --将用户设置为多用户访问模式
 ALTER DATABASE test SET MULTI_USER

语法

sp_dbcmptlevel [ [ @dbname = ] name ] 
    [ , [ @new_cmptlevel = ] version ]
 

参数
[ @dbname = ] name
要为其更改兼容级别的数据库的名称。数据库名称必须符合标识符的规则。name 的数据类型为 sysname,默认值为 NULL。

[ @new_cmptlevel = ] version
数据库要与之兼容的 SQL Server 的版本。version 的数据类型为 tinyint,默认值为 NULL。该值必须为下列值之一:
 = SQL Server 2000 
 = SQL Server 2005   
 = SQL Server 2008   
 = SQL Server 2012 

返回代码值
0(成功)或 1(失败)

结果集
如果未指定任何参数或未指定 name 参数,则 sp_dbcmptlevel 将返回错误。

如果指定 name 但未指定 version,则 数据库引擎将返回一条消息,显示指定数据库的当前兼容级别。

备注
有关兼容级别的说明,请参阅 ALTER DATABASE 兼容级别 (Transact-SQL)。

权限
只有数据库所有者、sysadmin 固定服务器角色和 db_owner 固定数据库角色的成员(前提是您要更改当前数据库)才能执行此过程。

时间: 2024-07-29 12:57:59

数据库语句高级应用之修改数据库兼容版本的相关文章

修改数据库为多用户模式_MsSql

修改数据库为多用户模式 SQL语句修改数据位多用户模式如下: DECLARE @SQL VARCHAR(MAX); SET @SQL='' SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID) FROM master..sysprocesses WHERE dbid=DB_ID('数据库名称'); EXEC(@SQL); GO ALTER DATABASE '数据库名称' SET MULTI_USER; 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等

《锋利的SQL(第2版)》——2.3 修改数据库

2.3 修改数据库 锋利的SQL(第2版)创建数据库后,可以对其原始定义进行更改,如扩展或收缩数据库.设置数据库选项等.要修改数据库,可以使用ALTER DATABASE等语句. 2.3.1 扩展数据库和文件 默认情况下,SQL Server可根据创建数据库时定义的增长参数自动扩展数据库.也可以通过为现有数据库文件分配更多空间,或者创建新文件来手动扩展数据库.如果未将数据库设置为自动增长或硬盘上没有足够的磁盘空间,数据库已经用完分配给它的空间且不能自动增长,会出现1105错误. 扩展数据库时,必

SpringSide开发实战(二):修改数据库、字符编码和快速部署应用

SpringSide默认的数据库是hsql,但是大部分开发人员熟悉的数据库是MySql,因此在实 际开发过程中,遇到的第一件事往往是修改数据库.在SpringSide中修改数据库很简单,还 是以前一篇中创建的xkland项目为例,首先修改src\main\resources\config文件夹下的 jdbc.properties文件,注释掉1.2行,解注释7.8行,并修改10.11行的用户名和密码, 如下: 1#jdbc.driverClassName=org.hsqldb.jdbcDriver

c#-C#中怎么在datagridview里面直接修改数据库中的数据

问题描述 C#中怎么在datagridview里面直接修改数据库中的数据 C#中怎么在datagridview里面直接修改数据库中的数据 解决方案 这个要看你是怎取的数据,如果是在系统里面直接通过配置dataset出来的,你可以直接配下dataset里的update方法,dataGridView更改后用AcceptChanges,就能更新了!如果查询那些是自己写的,就得自己写Update方法. 解决方案二: C#中怎么在datagridview里面直接修改数据库中的数据 直接修改数据库的内容比较

标准sql语句怎么修改数据库里所有这个字段

问题描述 标准sql语句怎么修改数据库里所有这个字段 所有表,然后这个字段是个字符串,想修改全部,但有的表列名不一定,怎么写sql 解决方案 对于sql server,表结构定义也作为一个表放在master数据库中,读取它并且修改就可以. 解决方案二: 表列名不一定,那就只写多个不同的sql语句判断条件来更新

SQL数据库的高级sql注入的一些知识_MsSql

[概 要] 这篇文章讨论常用的"sql注入"技术的细节,应用于流行的Ms IIS/ASP/SQL-Server平台.这里探讨有关这种攻击各种可以注入程序访问数据和数据库防范的方法.这篇文章面向两种读者:一是基于数据库web程序开发人员和审核各种web程序的安全专家. [介 绍] 结构化查询语言(SQL)是一种用来和数据库交互的文本语言SQL语言多种多样,大多的方言版本都共同宽松地遵循SQL-92标准(最新的ANSI标准[译者注:目前最新的是SQL-99]).SQL运行的典型的操作是&q

SQL数据库的高级sql注入的一些知识

[概 要] 这篇文章讨论常用的"sql注入"技术的细节,应用于流行的Ms IIS/ASP/SQL-Server平台.这里探讨有关这种攻击各种可以注入程序访问数据和数据库防范的方法.这篇文章面向两种读者:一是基于数据库web程序开发人员和审核各种web程序的安全专家. [介 绍] 结构化查询语言(SQL)是一种用来和数据库交互的文本语言SQL语言多种多样,大多的方言版本都共同宽松地遵循SQL-92标准(最新的ANSI标准[译者注:目前最新的是SQL-99]).SQL运行的典型的操作是&q

Dreamweaver开发ASP实例视频教程(6)修改数据库记录

dreamweaver|教程|视频教程|数据|数据库 本视频教程由本站合作网站陶益数码工作室http://www.ty502.com推出,欢迎大家访问他们的网站. 使用Dreamweaver开发ASP具有不用手工写代码的优点,非常适合初学者建设自己的动态网站.本套教程由我们精心设计奉献给大家,内容包含了文章整站教程.音乐整站教程.图片整站教程.文件上传系统教程.投票系统教程.会员分级管理系统教程和网站后台管理教程等,通过本教程的学习,相信您一定能很快掌握动态网站制作的方法,从代码的枯燥乏味中解脱

根据sql脚本修改数据库表结构

  最近由于项目需要要做一个小工具. 需求:客户用的老库并存储了一些数据,用了一段时间,我们根据客户提出新功能在老库的基础上对新库进行修改.这些修改有很多细节方面的修改,包含存储过程,增加表,修改表字段类型,添加字段. 然后我们自己更新并测试好软件后,需要改动客户那边的老库,老库的数据是要保存的. 解决方案一:很快我就想到用SQL SERVER 08 R2 自带的功能,生成新库脚本.把老库改个名字,跑新库脚本,然后通过数据库自带功能把老库数据导入到新库数据.测试的时候,数据量不大,速度还比较理想