互联网解决方案咨询

梦想有多大路就会有多远:作一颗IT量子
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数据库开发-批量附加数据库

Posted on 2009-08-08 14:18  互联网粒子  阅读(340)  评论(0编辑  收藏  举报
  1. --目前只适合SQL2005,SQL2000的不行
  2. --批量附加数据库备份例子:   
  3. --exec attach_db_pro 'c:\program files\microsoft sql server\data'   
  4.   
  5. if object_id('attach_db_pro'is not null  
  6. drop procedure attach_db_pro   
  7. go   
  8.   
  9.   
  10. create procedure attach_db_pro   
  11. @dir nvarchar(520)   
  12. as  
  13. declare @dbname varchar(20)   
  14. declare @filename nvarchar(520)   
  15. declare @name sysname   
  16. declare @temp_db_name varchar(20)   
  17. declare @i int  
  18. declare my_cursor cursor  
  19. for    
  20.     select  db_name(dbid) dbname,name,filename from master..sysaltfiles   
  21.     open my_cursor   
  22.     fetch next from my_cursor into @dbname,@name,@filename   
  23.     while  @@fetch_status = 0   
  24.     begin  
  25.           set @temp_db_name = @dbname   
  26.           set @i = 1   
  27.           print 'exec sp_attach_db @db_name = ' + @dbname + ',@filename' + convert(varchar,@i) + ' = ''' + @dir + '\' + @name + right(@filename,4)+''''   
  28.           fetch next from my_cursor into @dbname,@name,@filename   
  29.           while @@fetch_status = 0 and @temp_db_name = @dbname   
  30.           begin  
  31.                   set @i = @i + 1   
  32.                   print ',@filename' + convert(varchar,@i) + ' = ''' + @dir + '\'+@name+right(@filename,4)+''''   
  33.                   fetch next from my_cursor into @dbname,@name,@filename   
  34.           end  
  35.           print ''  
  36.     end  
  37. close my_cursor   
  38. deallocate my_cursor   
  39. go  

或者使用以下的办法来生成附加数据库的角本.
 private static  void att_database()
        {
            string tmp = "";
            FileInfo info = null;
            string[] s = Directory.GetFiles(@"D:\03backup\JujuyaDataBase\WebsiteDatabase","*.mdf");
            foreach (string str in s)
            {
                info = new FileInfo(str);
                Logs.Log.WriteLog("EXEC sp_attach_db @dbname = N'" + info.Name.Replace(".mdf","") + "'"+
                    " ,@filename1 = N\'D:\\03backup\\JujuyaDataBase\\WebsiteDatabase\\" + info.Name +"'"+
                    " ,@filename2 = N\'D:\\03backup\\JujuyaDataBase\\WebsiteDatabase\\" + info.Name.Replace(".mdf", "_log.LDF") + "'"
                    );               
            }      
        }