修改 数据库文件名(逻辑文件名)

--修改 数据库文件名(逻辑文件名)   
DECLARE @name VARCHAR(64)  
DECLARE @i     INT,  
        @j     INT,  
        @count INT  
DECLARE @newname VARCHAR(164)  
DECLARE @db_name VARCHAR(132)  
DECLARE @sql NVARCHAR(1200)  
DECLARE @sql_use NVARCHAR(1200)  
DECLARE @sql_get_file_count NVARCHAR(2400)  
DECLARE @use_db VARCHAR(132)  
DECLARE @file_count INT  
  
SET @file_count =1--任何一个数据库 默认有两个文件(一个数据文件一个日志文件)   
SET @j=1---数据库数据量循环变量   
  
---获取数据库总数量   
SELECT @count = Count(*)  
FROM   sys.databases  
WHERE  database_id > 4  
  
WHILE @j <= @count  
  BEGIN  
    
      ----获取数据库名   
      SELECT @db_name = name  
      FROM   (SELECT Row_number()  
                       OVER(  
                         ORDER BY database_id)rn,  
                     name  
              FROM   sys.databases  
              WHERE  database_id > 4  )a  
      WHERE  rn = @j  
  
      SET @i=1  
      SET @sql_get_file_count=N' use ' + @db_name + '' + Char(10) + Char(13)  
                              + 'select @file_count=count(1) from sys.database_files where type_desc=''ROWS''' ---type_desc=''ROWS''为 数据文件 type_desc=''LOG'' 为日志文件

      ---获取数据库文件数量   
      EXEC Sp_executesql  
        @sql_get_file_count,  
        N'@db_name nvarchar(32),@file_count int OUTPUT',  
        @db_name,  
        @file_count OUTPUT  
  
      WHILE @i <= @file_count  
        BEGIN  
            SET @sql_use =N' use ' + @db_name + '' + Char(10) + Char(13)  
                          + 'select @name=name from (select row_number() over(order by name)rn,name from sys.database_files where type_desc=''ROWS'')tmp where rn =@i  ' ---type_desc=''ROWS''为 数据文件 type_desc=''LOG'' 为日志文件 
            ---获取现 逻辑文件名   
            EXEC Sp_executesql  
              @sql_use,  
              N'@db_name nvarchar(32),@name varchar(64) OUTPUT,@i int ',  
              @db_name,  
              @name OUTPUT,  
              @i  

            ---构造文件最终修改成的格式  
             
            SET @newname =@db_name+'_log'  --这里需要注意修改的日志文件还是数据文件。这里只简单的将文件改成了和数据库名相同的名称
            if rtrim(ltrim(@newname))!=rtrim(ltrim(@name))
             begin
				SET @sql='alter database ' + @db_name  
						 + ' modify file (name=''' + @name  
						 + ''' ,newname=''' + @newname + ''')'  
	  
				---修改逻辑文件名   
				EXEC Sp_executesql  
				  @sql,  
				  N'@db_name nvarchar(32),@name varchar(64),@newname varchar(64)',  
				  @db_name,  
				  @name,  
				  @newname  
			end
            ---循环逻辑文件数量的变量   
            SET @i+=1  
        END  
      
        ---循环数据库数量的变量   
      SET @j+=1  
  END  


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值