Sql-Server

腳本無法作為 SQL Server 代理作業執行,從 SSMS 執行時成功完成

  • January 13, 2017

我有兩個計劃每天執行一次的 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_IDENTIFIERSSMS 中的預設設置ONOFF用於 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 | 開 | 開 | 關閉 | 關閉 |
| 阿里薩博特 | 關閉 | 開 | 關閉 | 關閉 |
+-------------------------+------------+------+-------------------+------------+

上表抄自Erland Sommarskog

因此,您需要SET QUOTED_IDENTIFIER ON在工作步驟中添加為第一行。

引用自:https://dba.stackexchange.com/questions/160987