<!-- if version -->
查询以更改恢复模型并将自动增长设置为50 MB
USE MASTER
GO
SET QUOTED_IDENTIFIER ON
GO
SET ARITHABORT ON
GO
除了系统数据库之外,还要使用所有数据库。
DECLARE @DBName NVARCHAR(255),@LogicalFileName NVARCHAR(255),@DBRecoveryDesc Varchar(200), @isql varchar(2000)
DECLARE DatabaseList CURSOR
FOR
SELECT name,recovery_model_desc
FROM sys.databases
WHERE state_desc = 'ONLINE'
AND is_read_only = 0
and database_id>4
ORDER BY name
在子查询下方面临错误
OPEN DatabaseList
FETCH NEXT FROM DatabaseList INTO @DBName,@DBRecoveryDesc
WHILE @@FETCH_STATUS = 0
BEGIN
SET @LogicalFileName=(SELECT name FROM sys.master_files AS mf WHERE DB_NAME(database_id)=@DBName and type_desc='log' )
If @DBRecoveryDesc='Full'
Begin
select @isql = 'Use ['+@DBName+']
ALTER DATABASE ['+@DBName+'] SET RECOVERY SIMPLE WITH NO_WAIT
ALTER DATABASE ['+@DBName+'] MODIFY FILE (NAME = N'''+@LogicalFileName+''', FILEGROWTH = 50)'
脚本将提供输出脚本 --exec(@isql) 打印(@isql) 结束
If @DBRecoveryDesc='Simple'
Begin
select @isql = 'Use ['+@DBName+']
ALTER DATABASE ['+@DBName+'] MODIFY FILE (NAME = N'''+@LogicalFileName+''', FILEGROWTH = 50)'
--exec(@isql)
print(@isql)
END
FETCH NEXT FROM DatabaseList INTO @DBName,@DBRecoveryDesc
END
CLOSE DatabaseList
DEALLOCATE DatabaseList
请帮我改变子查询的详细信息
答案 0 :(得分:0)
问题在于您的子查询:
SELECT name
FROM sys.master_files AS mf
WHERE DB_NAME(database_id) = @DBName
AND type_desc = 'log'
返回多条记录(因为@DBName
命名的数据库有多个日志文件),因此您无法将@LogicalFileName
设置为此子查询的结果 - 我认为@LogicalFileName
是字符串类型,如VARCHAR
或NVARCHAR
。
您需要更改子查询,以便它只返回单个值,或更改@LogicalFileName
变量的类型,以便可以处理多个结果(例如,将其声明为类型{{1 }})。