我有一个小脚本,用于在SQL Server 2014数据库上重建索引和更新统计信息 当我在MSSM中执行它时运行正常,所以我想把它放到一个每晚运行的工作中。
我使用此链接创建作业:
how to schedule a job for sql query to run daily?
这是我在第1步中的脚本:
declare @command nvarchar(1000)
DECLARE @TableName varchar(255)
DECLARE TableCursor CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_type = 'base table'
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
set @command = 'alter index all on ' + @TableName + ' rebuild'
exec sp_executesql @command
set @command = 'update statistics ' + @TableName
exec sp_executesql @command
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
这是我在第2步中的脚本:
insert into tblLog values (getdate(), 0, 'sql agent job rebuild index', 'indexes rebuild')
当我尝试Start Job at Step
时,它会在步骤1的历史记录中显示此消息:
以用户身份执行:NT SERVICE \ SQLAgent $ GTT_192。 ALTER INDEX失败 因为以下SET选项具有不正确的设置: ' QUOTED_IDENTIFIER&#39 ;.验证SET选项是否正确使用 计算列和/或过滤的索引视图和/或索引 索引和/或查询通知和/或XML数据类型方法和/或 空间索引操作。 [SQLSTATE 42000](错误1934)。这一步 失败。
我不清楚这个设置QUOTED_IDENTIFIER来自哪里。
那么为什么我在MSSM中运行而不是在工作中呢? 更重要的是,我能做些什么才能让它发挥作用?
答案 0 :(得分:2)
在开头添加脚本:
SET QUOTED_IDENTIFIER ON