Sql-Server
腳本無法作為 SQL Server 代理作業執行,從 SSMS 執行時成功完成
我有兩個計劃每天執行一次的 T-SQL 腳本。兩者都從不同的表中清理一些舊數據。兩個腳本都以同一使用者的身份在同一數據庫上執行。
腳本 A 將在 SQL Server Management Studio 和作為作業啟動時成功執行,但腳本 B 僅在 SQL Server Management Studio 中成功執行,即使以與設置為在 SQL Server 下執行腳本相同的使用者身份登錄也是如此代理人。
腳本 B 失敗並出現以下錯誤:
以使用者身份執行
$$ username $$.
DELETE 失敗,因為以下 SET 選項的設置不正確:‘QUOTED_IDENTIFIER’。 驗證 SET 選項對於索引視圖和/或計算列上的索引和/或過濾索引和/或查詢通知和/或 XML 數據類型方法和/或空間索引操作是否正確。
$$ SQLSTATE 42000 $$(錯誤 1934)。步驟失敗。
我在我要清理的一個表上確實有一個過濾索引,但為什麼它會通過 SSMS 工作?
QUOTED_IDENTIFIER
SSMS 中的預設設置ON
是OFF
用於 SQLCMD、OSQL、BCP 以及在您的情況下尤其是 SQL Server 代理。作為參考,這些是每個應用程序的不同預設選項
+-------------------------+------------+------+-------------------+------------+ | | ADO .Net, | 安全管理系統 | SQLCMD,OSQL, BCP | ISQL | | | ODBC | | SQL Server 代理 | 數據庫庫 | | | OLE 數據庫 | | | | +-------------------------+------------+------+-------------------+------------+ | ANSI_NULL_DFLT_ON | 開 | 開 | 開 | 關閉 | | ANSI_NULLS 開 | 開 | 開 | 關閉 | | ANSI_PADDING | 開 | 開 | 開 | 關閉 | | ANSI_警告 | 開 | 開 | 開 | 關閉 | | CONCAT_NULL_YIELDS_NULL | 開 | 開 | 開 | 關閉 | | QUOTED_IDENTIFIER | 開 | 開 | 關閉 | 關閉 | | 阿里薩博特 | 關閉 | 開 | 關閉 | 關閉 | +-------------------------+------------+------+-------------------+------------+
因此,您需要
SET QUOTED_IDENTIFIER ON
在工作步驟中添加為第一行。