为啥sql server 高版本的数据库不能附加低版本 mdf文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥sql server 高版本的数据库不能附加低版本 mdf文件?相关的知识,希望对你有一定的参考价值。
参考技术A 是这样的,662是SQL Server 2008 SP2以后的数据库版本号,SP2之前的SQL Server 2008 \\x0d\\x0a的数据库版本好是655,而661是SQL Server 2008 R2的数据库版本号,本身SQL Server 2008 R2的版本要比SQL Server 2008 要高,按常理661版的数据库文件是不能附加到支持655版本号的SQL Server 2008里的。至于出现这个蛋疼的提示是因为微软在SQL Server 2008 SP2里加入了15k分区数的功能,而发布SP2之前就已经发布了SQL Server 2008 R2了,由于SQL Server 2008 R2 RTM并不支持15k分区的功能,如果按常规SQL Server 2008还保持655的版本号的话就可能会出现附加15k分区的数据文件到SQL Server \\x0d\\x0a2008 R2 RTM中,这肯定是不能附加的,所以微软为了解决这个难题,就打破常规,SQL Server 2008 SP2里将数据库的版本号改为662,这样,由SQL Server 2008 R2 RTM的数据库版本号比SQL Server 2008 SP2的低,所以自然就不能附加了,避免了麻烦,不过为了一15k分区的功能改变了版本号带来的副作用就像楼主这种情况了。\\x0d\\x0a这时问题的根本缘由。\\x0d\\x0a其实说白了,你是拿SQL Server 2008 R2的数据库附加到SQL Server 2008中,这肯定是不行的。要么将你现在的数据库实例升级到 SQL Server 2008 R2并安装最新的SP补丁之后再附加。要么将chat数据库附加到SQL Server 2008 R2版的数据库实例里,生成SQL Server 2008版的脚本文件,使用脚本文件部署到SQL Server 2008 SP2里。\\x0d\\x0a\\x0d\\x0a至于前边有朋友说用备份的方式,如果理解了我前边说的就知道肯定也是行不通的。SqlServer低版本数据库附加Sql高版本数据库或备份文件
SqlServer低版本数据库不能直接还原或附加Sql高版本数据库或备份文件,我们常用DTS互导的方式,如果不同版本数据库不可访问,可以使用高版本数据库的DTS导出整个库的相应低版本建库脚本与数据,然后放在低版本数据库中去执行,常见如:我们库数据库一般是SqlServer2008+,有的客户使用的是2005版本的数据库,这时我们就提供了2005版本的建库脚本供用户自己在机器上执行,但由于文件过大(可以分成几个文件)会导致执行过程中内存不够的情形,对于此类种种情况我们可以使用命令行方式导入建表脚本与数据,Sql2005我们可以使用可以使用osql 语句来处理。
osql语法为:
osql -S 服务器 -U 用户名 -P 密码 -i SQL路径
osql 是一个 Microsoft Windows 32 命令提示符工具,您可以使用它运行 Transact-SQL 语句和脚本文件!
如何使用 Osql?
在开始->运行 中键入cmd,使用 "OSQL -?"命令,就可以显示osql命令行的帮助。 注意:osql 工具的选项列表是区分大小的,在使用时注意。
**1、使用osql执行单个 Transact-SQL 语句 **
在键入cmd与下面这一个类似的命令:
osql -E -q "Transact-SQL statement"
例如: sql -E -q "use myDB select * from myTable"
其中 -E 表示使用 Microsoft Windows NT 身份验证。
也可以使用sa账户,具体可以看看上面的命令!
而-q 表示运行 Transact-SQL 语句,但是在查询结束时不退出 osql。
如要运行 Transact-SQL 语句并退出 osql,请使用 -Q 参数来代替 -q。
**2、使用osql执行一个大脚本文件 **
将该工具指向一个脚本文件,步骤:
a.创建一个包含一批 Transact-SQL 语句的脚本文件(如 myfile.sql)。
b.打开命令提示符,键入与下面类似的一个命令,然后按 ENTER 键:
osql -E -i input_file
其中input_file 是脚本文件及其完整路径。例如,如果脚本文件 myfile.sql 在 C:\\users文件夹中,
请将参数 myfile 替换为 C:\\users\\myfile.sql。
该脚本文件的运行结果将出现在控制台窗口中。
如果您想将运行结果定向到一个文件,请向上述命令中添加 -o output_file 参数。例如:
osql -E -i input_file -o output_file
其中output_file 是输出文件及其完整路径。
如果你觉得太麻烦了,可以使用批处理,将常用的一些命令写在bat文件中,需要的时候替换一些参数,点击文件执行即可,此时把需要执行的sql文件放在新建的一个批处理文件中,扩展名为.bat后运行即可。
如果是sql2008数据库,则可以使用sqlcmd 来执行大文件sql脚本。sqlcmd命令语法 为: sqlcmd -S . -U sa -P 123 -d test -i data.sql
参数说明:-S 服务器地址 -U 用户名 -P 密码 -d 数据库名称 -i 脚本文件路径
本地服务器地址可以写 . 比较轻松,也可写(local)或者IP地址 要使用sqlcmd命令,需要在cmd命令行模式,把路径切换到:C:\\Program Files\\Microsoft SQL Server\\100\\Tools\\Binn后执行。具体路径视自己sql安装目录。
以上只是一些参考,具体的方式会很多。
以上是关于为啥sql server 高版本的数据库不能附加低版本 mdf文件?的主要内容,如果未能解决你的问题,请参考以下文章
SQL server 2008 r2附加数据库出现错误了,见下图,怎么解决?求帮助!!!!!
SQL SERVER 2008 R2 数据库附加到 SQL server 2005,怎么整