由于 SET 选项“QUOTED_IDENTIFIER”不正确,SQL 作业中的 INSERT 失败

use*_*827 5 sql-server sql-server-agent jobs

我创建了一个 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.
Run Code Online (Sandbox Code Playgroud)

我做了研究并了解到这可能是由于 SET 选项。所以我检查了我创建的表,它是用

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
Run Code Online (Sandbox Code Playgroud)

我看到有人有同样问题的帖子,并在将上述 SET 选项更改为 ON 后解决了它。我已经有了这个 SET,但仍然是同样的错误。我不知道为什么我会收到这个错误。

我在获取串行计划的查询中有这一行。

WITH XMLNAMESPACES ( 'http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p )
Run Code Online (Sandbox Code Playgroud)

这是它的样子:

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
Run Code Online (Sandbox Code Playgroud)

当我在查询窗口上运行它时,没有问题。当我把它放在一份工作中时,我收到了这个错误。

有什么建议?

Eri*_*ing 11

这不是创建表的方式,而是运行查询的选项。

代理确实以错误的设置运行。

SELECT *
FROM   sys.dm_exec_sessions
WHERE  is_user_process = 1
AND    (   ansi_nulls = 0
      OR   ansi_padding = 0
      OR   ansi_warnings = 0
      OR   arithabort = 0
      OR   concat_null_yields_null = 0
      OR   quoted_identifier = 0 );
Run Code Online (Sandbox Code Playgroud)

简单的解决方法是在执行插入的作业步骤开始时使用正确的选项。

例如,如果我创建这个表,插入就可以正常工作:

USE master

CREATE TABLE dbo.whatever (id INT, thing AS id * 2);

INSERT dbo.whatever ( id )
VALUES ( 0 )
Run Code Online (Sandbox Code Playgroud)

但是从代理工作步骤它失败了,除非我把它放在第一位:

SET ANSI_NULLS ON;
SET ANSI_PADDING ON;
SET ANSI_WARNINGS ON;
SET ARITHABORT ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET QUOTED_IDENTIFIER ON;
Run Code Online (Sandbox Code Playgroud)

供参考:创建索引视图

坚果