mssql 2000 下批量 附加/分离 数据库(sql语句)
来源:互联网 发布:涂子沛 大数据 下载 编辑:程序博客网 时间:2024/05/22 01:55
这次公司要把MS SQL Server 2000 服务器上的数据库复制到新的服务器上面去,于是几百个数据库文件就交给我附加到新服务器上了
以前一直没接触过这方面的东西,于是果断谷歌了也百度了 找了很多方法也下载了很多的工具,有些确实能用,但我就遇到了很多问题如下:
1.我的服务器是win 2008 server 64位 而好多是在XP下运行的
2.我的服务器上安装的数据库是2000 不是现在多用的2005或以上 很多是要在2005下的批量附加
3.有一个能正常运行,但就是附加不了.....怂爆了
想过用工具 也想过用php或java或c写一个小工具 但最后还是觉得搞个SQL语句的方便
于是我翻找了很多人的代码后得出下面的代码 (由于时间比较久了,当时没有保存参考的来源网站)
运行环境:
服务器系统:win2008s
数据库版本:mssql 2000 s3
create table tempFile(Name nvarchar(255) Not Null,depth int Null, IsFile bit Null)create table smoPrimaryFileProp(property sql_variant Null, value sql_variant Null)create table smoPrimayChildren(status int,fileid int,name sysname,filename nvarchar(512))GO--以上三个表为临时表 完成后可以删除 如果在2005以上的版本可以使用临时变量表Insert Into tempFile Exec master.dbo.xp_dirtree 'D:\Program Files (x86)\Microsoft SQL Server\MSSQL\LibraryData',1,1--以上就为所有要附加的数据库文件所在文件夹Declare @Path varchar(2000),@File nvarchar(255), @sql nvarchar(4000), @DataBase sysnameset @Path = 'D:\Program Files (x86)\Microsoft SQL Server\MSSQL\LibraryData\'-- @Path变量即为所有要附加的数据库文件所在的文件夹Declare cur_File Cursor For Select Name From tempFile As a Where IsFile=1 And Name Like '%.mdf' Open cur_File Fetch Next From cur_File Into @FileWhile @@Fetch_Status=0Begin Set @sql = 'dbcc checkprimaryfile (N'''+ @Path+ @File + ''' , 2) With No_Infomsgs' Insert Into smoPrimaryFileProp Exec (@sql) Set @sql='dbcc checkprimaryfile (N''' +@Path+ @File + ''' , 3) With No_Infomsgs' Insert Into smoPrimayChildren Exec (@sql) Select @DataBase=Quotename(Convert(nvarchar(255),value)), @sql=null From smoPrimaryFileProp Where Convert(nvarchar(255),property)='Database name' Select @sql=Isnull(@sql+','+Char(13)+Char(10), 'Create DataBase '+@DataBase+' On'+Char(13)+Char(10))+'(FileName=N'''+@Path+Right(Rtrim(filename),Charindex('\',Reverse(Rtrim(filename)))-1)+''')' From smoPrimayChildren Exec(@sql+' For Attach') Print N'成功附加數據庫: '+@DataBase Delete From tempFile Delete From smoPrimayChildren Delete From smoPrimaryFileProp Fetch Next From cur_File Into @FileEndClose cur_FileDeallocate cur_FileGo
运行完成后 就会显示哪些数据库成功附加了 就成功啦
注意事项:
1、此方法由于是直接获取指定文件夹下的所有数据库文件,所以如果路劲是数据库默认的Data文件夹,会由于已有激活状态的数据库文件而报错从而终止,最好把要批量附加的数据库文件放发哦另一个文件夹中
2、这个可以写成一个存储过程,本人较懒就没写了,想写的童鞋自己去写;同时还可以改成捕捉错误以防错误产生导致运行中断;还可以改成指定哪些文件不附加,这样就可以把所有数据文件放Data文件夹下了
3、如果你是把另一台电脑上的数据文件复制到另一台电脑上再批量附加的话,请一定不要忘记日志文件,在MSSQL中如果是在本电脑上分离的再附加有无日志文件无所谓都可以成功附加上,但如果是附加到不同的电脑上同时缺少日志文件的话将会附加失败,会报个什么物理文件错误的错误信息!这个虽然也可以解决(网上有自己搜),但如果数据库多的话,这个也只能一个个文件去解决是很麻烦的!所以一定不要忘了日志文件!!!
declare @SqlStr varchar(8000)select @SqlStr=''select @SqlStr=@SqlStr+'EXEC sp_detach_db ['+[name]+']'+CHAR(10)from master..sysdatabases where dbid>=7 --dbid 即为数据库的id号 前6个数据库一般都为sql server自带的数据库Exec(@SqlStr)print @SqlStr
注意:
由于定义的@SqlStr 是varchar(8000)的类型,如果要分离的数据很多的话,会由于超出限制而无法正常运行,所以如果很多的话就要另外写个判断长度什么类似分页执行的方法,继续本人较懒就交给感兴趣的童鞋了...
- mssql 2000 下批量 附加/分离 数据库(sql语句)
- SQL语句数据库分离、附加
- 批量附加、分离数据库
- 通过SQL语句附加和分离数据库
- SQL SERVER 2000 数据恢复(分离数据库+附加数据库)
- 批量分离和附加数据库
- 使用T-SQL语句分离和附加SQL Server数据库
- SQL Server 2000 数据库分离与附加
- sql数据库分离与附加
- T-sql分离附加数据库
- SQL附加分离数据库(命令)
- T-sql分离附加数据库
- SQL 分离和附加数据库
- 批量生成附加数据库语句
- 生成批量附加数据库语句
- SQL语句附加数据库
- SQL Server2000:分离数据库与附加数据库
- SQL Server 2000如何附加和分离数据库
- shell脚本的一些用法总汇
- 2013年4月4日
- 使用r.js压缩整个项目的JS
- C不常用的语法
- Android 一篇比较好的关于ScaleType的说明的文章
- mssql 2000 下批量 附加/分离 数据库(sql语句)
- maven---setting.xml文件
- DISCUZ 管理后台页面开发实例
- Android4.0和Android4.1全屏方法
- namespace
- win7 虚拟机virtualbox中ubuntu12.04安装samba实现文件共享
- IIS应用程序池对应的进程ID
- jsp页面window.location.href的用法
- struts2异常处理