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

2014-11-24 09:58:26 · 作者: · 浏览: 0
修改 数据库文件名(逻辑文件名)
[sql] www.2cto.com
--修改 数据库文件名(逻辑文件名)
DECLARE @name VARCHAR(64)
DECLARE @i INT,
@j INT,
@count INT
DECLARE @newname VARCHAR(64)
DECLARE @db_name VARCHAR(32)
DECLARE @sql NVARCHAR(1200)
DECLARE @sql_use NVARCHAR(1200)
DECLARE @sql_get_file_count NVARCHAR(2400)
DECLARE @use_db VARCHAR(32)
DECLARE @file_count INT
SET @file_count =2--任何一个数据库 默认有两个文件(一个数据文件一个日志文件)
SET @j=1---数据库数据量循环变量 www.2cto.com
---获取数据库总数量
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
AND database_id <> 8)a
WHERE rn = @j
SET @i=1
SET @sql_get_file_count=N' use ' + @db_name + '' + Char(10) + Char(13)
+ 'select @file_count=max(file_id) from sys.database_files'
---获取数据库文件数量
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 sys.database_files where file_id =@i'
---获取现 逻辑文件名
EXEC Sp_executesql
@sql_use,
N'@db_name nvarchar(32),@name varchar(64) OUTPUT,@i int ',
@db_name,
@name OUTPUT,
@i
---构造文件最终修改成的格式
SET @newname =Stuff(@name, 1, Charindex('_', @name) - 1, 'shenhua')
SET @sql='alter database ' + @db_name
+ ' modify file (name=''' + @name
+ ''' ,newname=''' + @newname + ''')'
---修改逻辑文件名 www.2cto.com
EXEC Sp_executesql
@sql,
N'@db_name nvarchar(32),@name varchar(64),@newname varchar(64)',
@db_name,
@name,
@newname
---循环逻辑文件数量的变量
SET @i+=1
END
---循环数据库数量的变量
SET @j+=1
END