我创建了一个 sql 作业来查询计划缓存并单独获取串行计划,然后将其从计划缓存中清除。作为 SQL 作业中步骤 1 的一部分,我仅过滤串行计划并将其插入到我创建的表中。当我运行作业时,在步骤 1 本身中我收到以下错误;
INSERT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations. [SQLSTATE 42000] (Error 1934). The step failed.
我做了研究并了解到这可能是由于 SET 选项。所以我检查了我创建的表,它是用
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
我看到人们有同样问题的帖子,并在将上述 SET 选项更改为 ON 后解决了这个问题。我已经有了这个 SET,但仍然是同样的错误。我不知道为什么我会收到这个错误。
我在获取串行计划的查询中有这一行。
WITH XMLNAMESPACES ( 'http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p )
这是它的样子:
WITH XMLNAMESPACES ( 'http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p ),
relop AS (
SELECT OBJECT_NAME(st.objectid, st.dbid) AS ObjectName,
cp.creation_time,
--------------------
--------------------
----------------------
))
INSERT INTO table_name
select * from relop
WHERE relop.total_relop = relop.serial_relop
当我在查询窗口上运行它时,没有问题。当我把它放在工作中时,我得到了这个错误。
有什么建议么?
这不是创建表的方式,而是您的查询运行的选项。
代理确实以错误的设置运行。
简单的解决方法是在执行插入的作业步骤开始时使用正确的选项。
例如,如果我创建这个表,插入就可以了:
但是从代理工作步骤它失败了,除非我把它放在第一位:
供参考:创建索引视图