mssql 2000 下批量 附加/分离 数据库(sql语句)

这次公司要把MS SQL Server 2000 服务器上的数据库复制到新的服务器上面去,于是几百个数据库文件就交给我附加到新服务器上了ms <wbr>sql <wbr>2000 <wbr>下批量 <wbr>附加/分离 <wbr>数据库(sql语句)

以前一直没接触过这方面的东西,于是果断谷歌了也百度了  找了很多方法也下载了很多的工具,有些确实能用,但我就遇到了很多问题如下:

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

运行完成后 就会显示哪些数据库成功附加了  就成功啦ms <wbr>sql <wbr>2000 <wbr>下批量 <wbr>附加/分离 <wbr>数据库(sql语句)

注意事项:
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 --dbid 即为数据库的id号  前6个数据库一般都为sql server自带的数据库
Exec(@SqlStr)
print @SqlStr

注意:
由于定义的@SqlStr 是varchar(8000)的类型,如果要分离的数据很多的话,会由于超出限制而无法正常运行,所以如果很多的话就要另外写个判断长度什么类似分页执行的方法,继续本人较懒就交给感兴趣的童鞋了...ms <wbr>sql <wbr>2000 <wbr>下批量 <wbr>附加/分离 <wbr>数据库(sql语句)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Python脚本向MSSQL数据库插入语句,首先需要使用pymssql或pyodbc等库来连接数据库。以下是一个简单的示例: ```python import pymssql # 连接数据库 conn = pymssql.connect(host='localhost', user='sa', password='password', database='test') cursor = conn.cursor() # 定义插入语句 insert_query = """ INSERT INTO table_name (column1, column2, column3) VALUES (%s, %s, %s) """ # 定义要插入的值 values = ('value1', 'value2', 'value3') try: # 执行插入语句 cursor.execute(insert_query, values) # 提交事务 conn.commit() print("数据插入成功") except Exception as e: # 发生错误时回滚事务 conn.rollback() print("数据插入失败") print(str(e)) # 关闭数据库连接 conn.close() ``` 在上述示例中,我们首先使用`pymssql.connect()`方法连接到MSSQL数据库,并使用`cursor()`方法创建一个游标对象来执行SQL语句。 然后,我们定义了一个插入语句,并使用`%s`作为占位符来接受要插入的值。 接下来,我们定义了要插入的值,这里是一个包含三个值的元组。 在`try`块中,我们使用`cursor.execute()`方法执行插入语句,并使用`commit()`方法提交事务,将数据写入数据库。 如果插入过程中出现错误,我们会在`except`块中进行错误处理,并使用`rollback()`方法回滚事务,确保数据的一致性。 最后,我们使用`conn.close()`方法关闭数据库连接。 总的来说,使用Python脚本向MSSQL数据库插入语句可以通过pymssql或pyodbc等库连接数据库,执行插入语句并将数据提交到数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值