如何把SQL Server数据库从高版本降级到低版本

上传人:ji****72 文档编号:37643864 上传时间:2018-04-20 格式:DOC 页数:20 大小:1.40MB
返回 下载 相关 举报
如何把SQL Server数据库从高版本降级到低版本_第1页
第1页 / 共20页
如何把SQL Server数据库从高版本降级到低版本_第2页
第2页 / 共20页
如何把SQL Server数据库从高版本降级到低版本_第3页
第3页 / 共20页
如何把SQL Server数据库从高版本降级到低版本_第4页
第4页 / 共20页
如何把SQL Server数据库从高版本降级到低版本_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《如何把SQL Server数据库从高版本降级到低版本》由会员分享,可在线阅读,更多相关《如何把SQL Server数据库从高版本降级到低版本(20页珍藏版)》请在金锄头文库上搜索。

1、如何把 SQL Server 数据库从高版本降级到低版本如何把 SQL Server 数据库从高版本降级到低版本由于目前还广泛使用着 SQLServer2000,很多公司又想使用新的 SQLServer,从而直接【分离/附加】或者【备份/还原】数据库,在不同版本之间存放。往往就会遇到版本不兼容的问题。前几天遇到了从我本机 2008R2 上备份的一个数据库还原到 2008 上面时报错:从运行版本 10.50.2500(2008R2 是 10.50)和 10.00.1600(2008 是 10.00)中可以看出这个版本不兼容问题,大部分情况下,从低版本升级到高版本,只要不是跨度太大,如 2000升

2、级到 2012,都不会怎么报错。除非使用了一些新版本不兼容的特性如*=来实现 left join 的语句。但是就像上图那样,从高版本还原到低版本的时候,问题就出现了,而且几乎一定会报错。下面给出几个小建议,例子是从 2008 降级到 2005: 方法一:使用图形化操作(GUI),打开 SSMS(SQL Server Management Studio)步骤 1:右键你要降级的数据库,按下图选择:步骤 2:在对话框中选择:步骤 3:在【高级】中选择下图:步骤 4:把脚本保存起来,然后在 SQLServer2005 中运行脚本。步骤 5:通过【任务】【导出数据】,把数据从 2008 导入到使用脚

3、本创建的库上如下图,就完成了:方法二:使用系统自带的存储过程实现:sp_dbcmptlevel 将某些数据库行为设置为与指定的 SQL Server 版本兼容下面是其内部实现代码:sql SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO create procedure sys.sp_dbcmptlevel - 1997/04/15 dbname sysname = NULL, - database name to change new_cmptlevel tinyint = NULL OUTPUT - the new compatibility l

4、evel to change to as set nocount on declare exec_stmt nvarchar(max) declare returncode int declare comptlevel float(8) declare dbid int - dbid of the database declare dbsid varbinary(85) - id of the owner of the database declare orig_cmptlevel tinyint - original compatibility level declare input_cmp

5、tlevel tinyint - compatibility level passed in by user ,cmptlvl80 tinyint - compatibility to SQL Server Version 8.0 ,cmptlvl90 tinyint - compatibility to SQL Server Version 9.0 ,cmptlvl100 tinyint - compatibility to SQL Server Version 10.0 select cmptlvl80 = 80, cmptlvl90 = 90, cmptlvl100 = 100 - S

6、P MUST BE CALLED AT ADHOC LEVEL - if (nestlevel 1) begin raiserror(15432,-1,-1,sys.sp_dbcmptlevel) return (1) end - If no dbname given, just list the valid compatibility level values. if dbname is null begin raiserror (15048, -1, -1, cmptlvl80, cmptlvl90, cmptlvl100) return (0) end - Verify the data

7、base name and get info select dbid = dbid, dbsid = sid ,orig_cmptlevel = cmptlevel from master.dbo.sysdatabases where name = dbname - If dbname not found, say so and list the databases. if dbid is null begin raiserror(15010,-1,-1,dbname) print select name as Available databases: from master.dbo.sysd

8、atabases return (1) end - Now save the input compatibility level and initialize the return clevel - to be the current clevel select input_cmptlevel = new_cmptlevel select new_cmptlevel = orig_cmptlevel - If no clevel was supplied, display and output current level. if input_cmptlevel is null begin r

9、aiserror(15054, -1, -1, orig_cmptlevel) return(0) end - If invalid clevel given, print usage and return error code - usage: sp_dbcmptlevel dbname , compatibilitylevel if input_cmptlevel not in (cmptlvl80, cmptlvl90, cmptlvl100) begin raiserror(15416, -1, -1) print raiserror (15048, -1, -1, cmptlvl80

10、, cmptlvl90, cmptlvl100) return (1) end - Only the SA or the dbo of dbname can execute the update part - of this procedure sys.so check. if (not (is_srvrolemember(sysadmin) = 1) and suser_sid() db_id() or is_member(db_owner) 0 begin raiserror(15002,-1,-1,sys.sp_dbcmptlevel) return (1) end set exec_s

11、tmt = ALTER DATABASE + quotename(dbname, ) + SET COMPATIBILITY_LEVEL = + cast(input_cmptlevel as nvarchar(128) - Note: database dbname may not exist anymore exec(exec_stmt) select new_cmptlevel = input_cmptlevel return (0) - sp_dbcmptlevel GO 语法sql sp_dbcmptlevel dbname = name , new_cmptlevel = vers

12、ion 参数 dbname = name要为其更改兼容级别的数据库的名称。数据库名称必须符合标识符的规则。name 的数据类型为 sysname,默认值为 NULL。 new_cmptlevel = version数据库要与之兼容的 SQL Server 的版本。version 的数据类型为 tinyint,默认值为 NULL。该值必须为下列值之一:80 = SQL Server 200090 = SQL Server 2005100 = SQL Server 2008返回代码值0(成功)或 1(失败)SQLSQL ServerServer 20122012 将数据导出为脚本详细图解将数据导

13、出为脚本详细图解注意事项:后续版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功能的应用程序。 改为使用 ALTER DATABASE 兼容级别。前记:从 SQL SERVER 2008 开始,我们就可以很方便的导出数据脚本,而无需再借助存储过程,但是 SQL Server 2012 和 SQL Server 2008 的导出脚本的过程还有一点细微的差别,我在这里详细的介绍一下。在 SQL Server 2012 中我们无法直接找到例如下图中的编写数据的脚本的选项。 对于 SQL Server 2008 来说,我们可以

14、在 SSMS2008 中的对象资源管理器中,右击需要导出数据的数据库,在弹出的菜单中选择“任务”下的“生成脚本”选项。在脚本想到的选择脚本呢选项中,将“编写数据的脚本”选择为 TRUE,这里默认是 FALSE的。 下面我在 SQL Server 2012 中来详细图解一下这个过程。我新建了一个名为 BlogDB 的数据库,里面只有一张表 TestTable,表中有一些杂乱的测试数据。右键该数据库,然后选择“任务”,选择“生成脚本”。 点击下一步。再点击下一步。这个时候不要着急点下一步,我们先点击“高级(A)”按钮。 我们在里面没有看到类似 SQL Server 2008 中的编写数据的脚本,TRUE 和 FALSE 的选项,但是有个功能相似的选项,如下图。 如果我们要导出数据的表结构和表脚本,把要编写脚本的数据的类型,从仅限架构改成架构和数据,点“确定”。我们可以把脚本保持到文件,保存到剪贴板,或是保存到新建查询窗体,我个人习惯保存到文件。这里可以修改文件的保存路径,可以给文件命名,例如我给文件起名为 BlogDB.sql。然后点击下一步。 点击下一步 。点击完成即可,然后我们到指定目录去找这个文件。 打开这个文件我们可以看到:这个脚本就是我们想要的结果了。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号