--修改 数据库文件名(逻辑文件名)
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