有如下SQL语句:
UPDATE tb_Product
SET releaseTime = DATEADD(mm, DATEDIFF(mm, releaseTime, GETDATE()), releaseTime)
WHERE     (DAY(releaseTime) = DAY(GETDATE()))
该SQL语句在查询窗口中可以正确运行,但配置到SQLSERVER代理的作业中自动执行时却不能运行,错误消息如下:消息
已以用户 NT AUTHORITY\SYSTEM 的身份执行。 UPDATE 失败,因为下列 SET 选项的设置不正确:'QUOTED_IDENTIFIER'。请确保 SET 选项可正确用于计算列和/或查询通知和/或 xml 数据类型方法的索引视图和/或索引。 [SQLSTATE 42000] (错误 1934).  该步骤失败。

解决方案 »

  1.   

    给NT AUTHORITY\SYSTEM赋上UPDATE的权限
      

  2.   

    将当前作业的执行用户改为SA,或者其它可以执行这个SQL的用户。
      

  3.   

    USE master 
    GO CREATE LOGIN xxx 
    GO USE 数据库 
    GO REVOKE EXECUTE ON 系统存储过程 FROM public 
    GO CREATE USER xxx FOR LOGIN xxx 
    GO GRANT CREATE FUNCTION  TO xxx 
    GRANT CREATE PROCEDURE TO xxx 
    GRANT CREATE DEFAULT  TO xxx 
    GRANT CREATE TABLE    TO xxx 
    GO GRANT CONTROL ON SCHEMA::dbo TO xxx 
    GO DENY CREATE RULE      TO xxx 
    DENY CREATE VIEW      TO xxx 
    DENY BACKUP DATABASE  TO xxx 
    DENY BACKUP LOG      TO xxx 
    GO 
    举例
      

  4.   

    已以用户 NT AUTHORITY\SYSTEM 的身份执行。给这个用户,UPDATE权限
      

  5.   

    已以用户 dbo 的身份执行。 UPDATE 失败,因为下列 SET 选项的设置不正确:'QUOTED_IDENTIFIER'。请确保 SET 选项可正确用于计算列和/或查询通知和/或 xml 数据类型方法的索引视图和/或索引。 [SQLSTATE 42000] (错误 1934).  该步骤失败。
      

  6.   

    呵呵,自己解决了需要加如下一条语句:SET QUOTED_IDENTIFIER ON 
      

  7.   

    quoted_identifier 
    设成on看