您的位置:首页 > 数据库

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

2013-01-08 19:35 267 查看
--修改 数据库文件名(逻辑文件名)
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


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: