Sql server 将SQL Server实例上的每个数据库设置为";简单回收“;
我正在尝试遍历实例上的每个数据库,检查恢复模型,如果它是Sql server 将SQL Server实例上的每个数据库设置为";简单回收“;,sql-server,tsql,sql-server-2008,Sql Server,Tsql,Sql Server 2008,我正在尝试遍历实例上的每个数据库,检查恢复模型,如果它是完整的,我想将其更改为简单的 我在这里做错了什么: USE MASTER DECLARE @isql varchar(2000), DECLARE @dbname varchar(64) DECLARE c1 cursor FOR SELECT name FROM master..sysdatabases WHERE name NOT IN ('master', 'model', 'msdb', 'temp
完整的
,我想将其更改为简单的
我在这里做错了什么:
USE MASTER
DECLARE @isql varchar(2000),
DECLARE @dbname varchar(64)
DECLARE c1 cursor FOR
SELECT name
FROM master..sysdatabases
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')
OPEN c1
FETCH NEXT c1 into @dbname
WHILE @@fetch_status <> -1
BEGIN
SELECT @isql = 'ALTER DATABASE @dbname SET AUTO_CLOSE OFF'
SELECT @isql = REPLACE (@isql, '@dbname', @dbname)
PRINT @isql
EXEC (@isql)
SELECT @isql = 'ALTER DATABASE @dbname SET RECOVERY SIMPLE'
SELECT @isql = REPLACE (@isql, '@dbname', @dbname)
PRINT @isql
EXEC (@isql)
SELECT @isql = 'USE @dbname checkpoint'
SELECT @isql = REPLACE (@isql, '@dbname', @dbname)
PRINT @isql
EXEC (@isql)
FETCH NEXT FROM c1 INTO @dbname
END
CLOSE c1
DEALLOCATE c1
使用MASTER
声明@isql varchar(2000),
声明@dbname varchar(64)
为声明c1游标
选择名称
从主..系统数据库
其中名称不在('master'、'model'、'msdb'、'tempdb'中)
开放式c1
将下一个c1提取到@dbname中
而@@fetch\u状态为-1
开始
选择@isql='alterdatabase@dbname SET AUTO_CLOSE OFF'
选择@isql=REPLACE(@isql、@dbname、@dbname)
打印@isql
EXEC(@isql)
选择@isql='ALTER DATABASE@dbname SET RECOVERY SIMPLE'
选择@isql=REPLACE(@isql、@dbname、@dbname)
打印@isql
EXEC(@isql)
选择@isql='USE@dbname checkpoint'
选择@isql=REPLACE(@isql、@dbname、@dbname)
打印@isql
EXEC(@isql)
从c1获取下一个到@dbname
结束
关闭c1
解除分配c1
我得到这个错误:
味精102,第15级,状态1,第11行“下一步”附近的语法不正确
我修复了您的查询,您忘了在这里添加
FROM
:将下一个c1提取到@dbname
它应该是FETCH NEXT FROM c1进入@dbname
请参见下面的代码修复:
USE MASTER
DECLARE @isql varchar(2000)
DECLARE @dbname varchar(64)
DECLARE c1 cursor FOR
SELECT quotename(name)
FROM master..sysdatabases
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')
OPEN c1
FETCH NEXT FROM c1 into @dbname
WHILE @@fetch_status <> -1
BEGIN
SELECT @isql = 'ALTER DATABASE @dbname SET AUTO_CLOSE OFF'
SELECT @isql = REPLACE (@isql, '@dbname', @dbname)
PRINT @isql
EXEC (@isql)
SELECT @isql = 'ALTER DATABASE @dbname SET RECOVERY SIMPLE'
SELECT @isql = REPLACE (@isql, '@dbname', @dbname)
PRINT @isql
EXEC (@isql)
SELECT @isql = 'USE @dbname checkpoint'
SELECT @isql = REPLACE (@isql, '@dbname', @dbname)
PRINT @isql
EXEC (@isql)
FETCH NEXT FROM c1 INTO @dbname
END
CLOSE c1
DEALLOCATE c1
使用MASTER
声明@isql varchar(2000)
声明@dbname varchar(64)
为声明c1游标
选择quotename(名称)
从主..系统数据库
其中名称不在('master'、'model'、'msdb'、'tempdb'中)
开放式c1
从c1获取下一个到@dbname
而@@fetch\u状态为-1
开始
选择@isql='alterdatabase@dbname SET AUTO_CLOSE OFF'
选择@isql=REPLACE(@isql、@dbname、@dbname)
打印@isql
EXEC(@isql)
选择@isql='ALTER DATABASE@dbname SET RECOVERY SIMPLE'
选择@isql=REPLACE(@isql、@dbname、@dbname)
打印@isql
EXEC(@isql)
选择@isql='USE@dbname checkpoint'
选择@isql=REPLACE(@isql、@dbname、@dbname)
打印@isql
EXEC(@isql)
从c1获取下一个到@dbname
结束
关闭c1
解除分配c1
您的查询是否遇到任何错误?它似乎在更改恢复模型,而不检查是否已在Simple中。我在您的查询中没有看到任何这样做的代码部分。检查sys.databases.dbo.recovery\u model
注意到您仍在使用sysdatabases
。请更改为系统数据库sys.databases
sysdatabases
将在SQL Server的未来版本中删除,其中恢复模式3