我有两个计划每天运行一次的 T-SQL 脚本。两者都从不同的表中清理一些旧数据。两个脚本都以同一用户的身份在同一数据库上运行。
脚本 A 将在 SQL Server Management Studio 和作为作业启动时成功执行,但脚本 B 仅在 SQL Server Management Studio 中成功执行,即使以与设置为在 SQL Server 下运行脚本相同的用户身份登录也是如此代理人。
脚本 B 失败并出现以下错误:
作为用户 [用户名] 执行。
DELETE 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'。验证 SET 选项对于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作是否正确。
[SQLSTATE 42000](错误 1934)。步骤失败。
我在我要清理的一个表上确实有一个过滤索引,但为什么它会通过 SSMS 工作?
QUOTED_IDENTIFIER
SSMS 中的默认设置ON
是OFF
用于 SQLCMD、OSQL、BCP 以及在您的情况下尤其是 SQL Server 代理。作为参考,这些是每个应用程序的不同默认选项
上表抄自Erland Sommarskog
因此,您需要
SET QUOTED_IDENTIFIER ON
在工作步骤中添加为第一行。