Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将SQL Server实例上的每个数据库设置为";简单回收“;_Sql Server_Tsql_Sql Server 2008 - Fatal编程技术网

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