プランキャッシュをクエリしてシリアルプランのみを取得し、プランキャッシュからクリアする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 *
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 );
簡単な修正は、挿入を行うジョブステップの最初に正しいオプションを使用することです。
たとえば、このテーブルを作成すると、挿入は正常に機能します。
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;
参考: インデックス付きビューの作成