Roy_88的专栏

激情在燃烧!!!

用户操作
[即时聊天] [发私信] [加为好友]
吴熹ID:roy_88
13804次访问,排名8481(-1)好友13人,关注者186
微软中文技术论坛(MSDN and TechNet)SQL版主(論壇ID:中國風)
roy_88的文章
原创 28 篇
翻译 0 篇
转载 0 篇
评论 15 篇
Roy_88的公告
燃料你的激情!
最近评论
holon:不错支持一下

----------
www.arraylist.cn
IT人的酒吧式交流平台
----------
air_snake:收了他
hzs2006:谢谢楼主!收藏了!
zhiguo2008:果真很好。
ranzj:这个安全吗?
文章分类
收藏
    相册
    友情链接
    中国风_燃料你的激情!!!
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 批量分离和附加数据库收藏

    新一篇: 游标变量用法经典 | 旧一篇: 局域网自动备份删除

     

    use master
    go
    declare @detach nvarchar(4000)
    set @detach=''
    select @detach=@detach+char(13)+'exec sp_detach_db  '+quotename(Name)+',''true''' from master..sysdatabases   where  Name like 'Lonigo%'
    and dbid>4
    exec@detach)
    --EXEC sp_detach_db '+ @name+', '+ 'true'

    go
    use master
    go
    /***********************************************************************************************************************
    說明:@file顯示格式為' E:date'
            禁止數據庫名為'.'圓點。如:HR.hr.mdf/HR.hr.ldf 在文件名存在兩個圓點

    功能:附加數據庫

    **********************************************************************************************************************
    */

    create proc DataAttach (@file nvarchar(100),@file1 nvarchar(100)=@file)
    as

    declare @mdf1 nvarchar(200),@mdf2 nvarchar(200),@ldf1 nvarchar(200),@ldf2 nvarchar(200)

    select @mdf1='dir /b/o/s '+@file+'*.mdf',@ldf1='dir /b/o/s '+@file1+'*.ldf',
        
    @mdf2='dir /b/o '+@file+'*.mdf',@ldf2='dir /b/o '+@file1+'*.ldf'

    if object_id('tempdb..#ta'is not null
        
    drop table #ta
    create table #ta(ID int identity(1,1),FName nvarchar(256),DataName nvarchar(256))
    insert #ta(FName) exec master..xp_cmdshell  @mdf1
    insert #ta(FName) exec master..xp_cmdshell  @ldf1

    if object_id('tempdb..#tb'is not null
        
    drop table #tb
    create table #tb(ID int identity(1,1),FName nvarchar(256))
    insert #tb(FName) exec master..xp_cmdshell  @mdf2
    insert #tb(FName) exec master..xp_cmdshell  @ldf2

    --EXECUTE master.dbo.xp_fileexist N'E:LonigoBrandAgencyLonigoBrandAgency_Data.MDF'

    update a
    set DataName=b.FName
     
    from #ta a join #tb b on reverse(left(reverse(a.FName),charindex('',reverse(a.FName))-1))=b.FName

    update #ta
    set DataName=case     when charindex('_',DataName)>0 then     
                                            
    case when reverse(left(reverse(DataName),charindex('_',reverse(DataName))-1)) in('Data.MDF','log.LDF')
                                                
    then reverse(stuff(reverse(DataName),1,charindex('_',reverse(DataName)),''))
                                                
    else reverse(stuff(reverse(DataName),1,charindex('.',reverse(DataName)),'')) end
                    
    else  left(DataName,charindex('.',DataName)-1end
        


    if (select count(1from #ta a where exists(select 1 from master..sysdatabases where Name=a.DataName))>0
        
    begin
            
    declare @error nvarchar(1000)
            
    select @error=isnull(@error+',','')+DataName from  #ta a where exists(select 1 from master..sysdatabases where Name=a.DataName) group by DataName
            
    print '已存在數據庫 '+@error
        
    end

    if  1>0
        
    begin
            
    declare @s nvarchar(4000),@s1 nvarchar(4000)
            
    set @s=''
            
    select  @s=@s+char(13)+
            
    'EXEC sp_attach_db @dbname = N'+quotename(DataName,'''')+', @filename1 = N'''+
            
    max(case when FName like '%.MDF' then FName else '' end)+''', @filename2 = N'''+
            
    max(case when FName like '%.LDF' then FName else '' end)+'''',@s1=isnull(@s1,'')+DataName+char(13)
            
    from #ta ta
            
    where FName is not null
            
    and  (select count(1from #ta tc where DataName=ta.DataName)=2--記錄為2
            and not exists(select 1 from master..sysdatabases where Name=ta.DataName)
            
    group by DataName
            
    --print @s
            exec (@s)
        
    end

    if @@error<>0
        
    print '附加失敗'+char(13)+@s1
    else
        
    print '附加成功'+char(13)+@s1

    go


    select * from #ta

    --exec DataAttach  'E:LonigoData'

    发表于 @ 2007年08月25日 11:49:00|评论(loading...)|编辑

    新一篇: 游标变量用法经典 | 旧一篇: 局域网自动备份删除

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Roy_88