我想构建一个脚本,将每个用户数据库的恢复模式设置为 SIMPLE,并将其放入我的开发服务器的代理作业中。看起来很简单(抱歉双关语):
EXEC sp_msforeachdb 'USE ?; IF DB_ID() >= 5 ALTER DATABASE ? SET RECOVERY SIMPLE;'
Run Code Online (Sandbox Code Playgroud)
它也有效。只针对正确的数据库执行,等等。但是,我收到以下错误消息:
消息 5058,级别 16,状态 1,第 1 行
无法在数据库 'tempdb' 中设置选项 'RECOVERY'。
我可以针对用户数据库的 sys.databases 视图编写动态 SQL,但我想知道为什么 sp_msforeachdb 会生成此错误。
有没有人有任何经验可以阐明这一点?
编辑:将代码设置为排除 ID < 5 的任何数据库,我很困惑为什么我会收到此错误。
您必须使用动态 SQL 来实现这一点,因为无论检查如何,都会为每个数据库评估 DDL,但由于检查,它不会被执行。
set quoted_identifier on
EXEC sp_msforeachdb "
IF '?' not in ('tempdb')
begin
exec ('ALTER DATABASE [?] SET RECOVERY SIMPLE;')
print '?'
end
"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3700 次 |
最近记录: |