Sql-Server
由於不正確的 SET 選項“QUOTED_IDENTIFIER”,SQL 作業中的 INSERT 失敗
我創建了一個 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
當我在查詢視窗上執行它時,沒有問題。當我把它放在工作中時,我得到了這個錯誤。
有什麼建議麼?
這不是創建表的方式,而是您的查詢執行的選項。
代理確實以錯誤的設置執行。
SELECT s.* FROM sys.dm_exec_sessions AS s WHERE s.is_user_process = 1 AND ( s.ansi_nulls = 0 OR s.ansi_padding = 0 OR s.ansi_warnings = 0 OR s.arithabort = 0 OR s.concat_null_yields_null = 0 OR s.quoted_identifier = 0 );
簡單的解決方法是在執行插入的作業步驟開始時使用正確的選項。
例如,如果我創建這個表,插入就可以了:
USE master CREATE TABLE dbo.whatever (id INT, thing AS id * 2); INSERT dbo.whatever ( id ) VALUES ( 0 )
但是從代理工作步驟它失敗了,除非我把它放在第一位:
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;
供參考:創建索引視圖