这次公司要把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 sysname
set @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 @File
While @@Fetch_Status=0
Begin
    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 @File
End
 
Close cur_File
Deallocate cur_File
Go
 
代码结束。
 
运行完成后 就会显示哪些数据库成功附加了  就成功啦
 
注意事项:
1、此方法由于是直接获取指定文件夹下的所有数据库文件,所以如果路劲是数据库默认的Data文件夹,会由于已有激活状态的数据库文件而报错从而终止,最好把要批量附加的数据库文件放发哦另一个文件夹中
 
2、这个可以写成一个存储过程,本人较懒就没写了,想写的童鞋自己去写;同时还可以改成捕捉错误以防错误产生导致运行中断;还可以改成指定哪些文件不附加,这样就可以把所有数据文件放Data文件夹下了
 
3、如果你是把另一台电脑上的数据文件复制到另一台电脑上再批量附加的话,请一定不要忘记日志文件,在MSSQL中如果是在本电脑上分离的再附加有无日志文件无所谓都可以成功附加上,但如果是附加到不同的电脑上同时缺少日志文件的话将会附加失败,会报个什么物理文件错误的错误信息!这个虽然也可以解决(网上有自己搜),但如果数据库多的话,这个也只能一个个文件去解决是很麻烦的!所以一定不要忘了日志文件!!!
 
 
 
顺便附加一个批量分离数据的SQL代码:
declare @SqlStr varchar(8000)
select @SqlStr=''
select @SqlStr=@SqlStr+'EXEC  sp_detach_db ['+[name]+']'+CHAR(10)
from master..sysdatabases where dbid>=7
Exec(@SqlStr)
print @SqlStr
代码结束
注释:
dbid 即为数据库的id号  前6个数据库一般都为sql server自带的数据库
 
注意:
由于定义的@SqlStr 是varchar(8000)的类型,如果要分离的数据很多的话,会由于超出限制而无法正常运行,所以如果很多的话就要另外写个判断长度什么类似分页执行的方法,继续本人较懒就交给感兴趣的童鞋了...

[转]ms sql 2000 下批量 附加/分离 数据库(sql语句)的更多相关文章

  1. sqlserver sql语句附加 分离数据库

    当使用 sp_attach_db 系统存储过程附加数据库时- - Tag: 当使用 sp_attach_db 系统存储过程附加数据库时 //附加数据库 sp_attach_db 当使用 sp_atta ...

  2. 如何分离数据库 (SQL Server Management Studio)

    在 SQL Server Management Studio 对象资源管理器中,连接到 SQL Server 数据库引擎的实例上,再展开该实例. 展开“数据库”,并选择要分离的用户数据库的名称. 分离 ...

  3. sql 2000以及2005以上获取数据库中所有的表(不包括系统表)

    ---------------------------------------------------------------------------- --sql 2005以上数据库 --- 获取数 ...

  4. SQL监控:mysql及mssql数据库SQL执行过程监控审计

    转载 Seay_法师 最近生活有很大的一个变动,所以博客也搁置了很长一段时间没写,好像写博客已经成了习惯,搁置一段时间就有那么点危机感,心里总觉得不自在.所以从今天起还是要继续拾起墨笔(键盘),继续好 ...

  5. SQL SERVER 2000 数据恢复(分离数据库+附加数据库)

    一.分离数据库     SQL Server 2000允许分离数据库的数据和事务日志文件,然后将其重新附加到同一台或另一台服务器上.分离数据库将从SQL Server 删除数据库,所以当点击“分离数据 ...

  6. 牛客网数据库SQL实战解析(31-40题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  7. 牛客网数据库SQL实战解析(11-20题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  8. 牛客网数据库SQL实战解析(1-10题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  9. 牛客网数据库SQL实战解析(51-61题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

随机推荐

  1. 流媒体学习二-------SIP协议学习(基本场景分析 )

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.SIP业务基本知识 1.1 业务介绍 会话初始协议(Session Initiation Protocol) ...

  2. Linux进程间通信与线程间同步详解(全面详细)

    引用:http://community.csdn.net/Expert/TopicView3.asp?id=4374496linux下进程间通信的几种主要手段简介: 1. 管道(Pipe)及有名管道( ...

  3. Prestashop 页面空白

    Advanced Parameters > Performance页面空白,无任何提示错误,解决方法: 更改文件/cache/class_index.php 权限为666

  4. Magento Service Temporarily Unavailable解决方法

    插件升级错误或安装失败时 会出现Service Temporarily Unavailable错误,使网站前台后台都无法显示. 在操作完成的情况下,仍然出现这个错误时可以采用以下方法: 1.删除网站站 ...

  5. [转]详细介绍java中的数据结构

    详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...

  6. ios项目生成ipa文件方法

    做这些的前提是你配置好了所有的证书,如果还没先去配置证书吧. 1.打开需要生成ipa的ios项目.2.在运行按钮的后面选择ios Device3.点击Product 按钮,选择第五个Archive4. ...

  7. LeetCode Basic Calculator II

    原题链接在这里:https://leetcode.com/problems/basic-calculator-ii/ Implement a basic calculator to evaluate ...

  8. Inside Flask - app.py - 2

    Inside Flask - app.py - 2 Flask 初始化参数 Flass 类是 Flask 框架的核心,一个 flask 对象处理视图函数注册.URL规则.模板配置.参数设置等等. 一般 ...

  9. node.js render模板

    在用node组织前端架构和后端的时候,如果不用nginx做反向代理,则会考虑怎么样render模板. 在现有的项目中没有以下几种方式render模板: 1.将.html当做静态文件,如果url定位到哪 ...

  10. 第十五篇 Integration Services:SSIS参数

    本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到S ...