系统上线发现有一个SQL的作业一直没有执行所以就产看了作业的日志。发现执行失败如下图

        错误信息为: INSERT 失败,因为下列 SET 选项的设置不正确: 'ARITHABORT'。请确保 SET 选项正确无误,可以用于 计算列上的索引视图和/或索引和/或筛选的索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。。 [SQLSTATE 42000] (错误 1934).  该步骤失败。

        在计算列或索引视图上创建或操作索引时,SET   ANSI_NULLS   也必须为   ON。如果   SET   ANSI_NULLS   为   OFF,计算列或索引视图上带索引的表上的   CREATE、UPDATE、INSERT   和   DELETE   语句将失败。SQL   Server   将返回一个错误,列出所有违反所需值的   SET   选项。另外,在执行   SELECT   语句时,如果   SET   ANSI_NULLS   为   OFF,则   SQL   Server   将忽略计算列或视图上的索引值并解析选择,就好象表或视图上没有这样的索引一样.

        先黏贴出处理的方法在注释说明,方法如下:

        1、你可以在TSQL前Set ARITHABORT ON,代码如下

Set ARITHABORT ON 
GO 
INSERT INTO 表名 ..

        2、在ADO.NET中,你可以这样来写(C#代码)

conn.Execute("SET ARITHABORT ON");


        如果以上你都觉得很麻烦或由于一些原因没法更改,你可以尝试修改SQL Server服务器选项

        3、

exec sp_dboption '数据库名','ARITHABORT','true'

4、


ALTER DATABASE '数据库名'  
SET ARITHABORT ON
        上面的操作第三点最为简便。


        注释:

        SET ARITHABORT:在查询执行过程中发生溢出或被零除错误时终止查询。

        语法: SET ARITHABORT { ON | OFF }

        注释: 如果 SET ARITHABORT 为 ON,则这些错误情况将导致查询或批处理终止。如果在事务内发生错误,则回滚事务。如果 SET ARITHABORT 为 OFF 并且发生了这些错误之一,则显示一条警告消息,并给算术运算的结果赋以空值。

        说明:  如果 SET ARITHABORT 和 SET ARITHIGNORE 都没有设置,则 Microsoft® SQL Server™ 将在执行查询后返回 NULL 和一条警告信息。
如果 SET ARITHABORT 为 OFF 并且在对表达式的求值过程中 INSERT、DELETE 或 UPDATE 语句遇到算术错误(溢出、被零除或域错误),SQL Server 将插入或更新 NULL 值。如果目标列不可为空,则插入或更新操作失败并且用户收到错误信息。

        如果 SET ARITHABORT 或 SET ARITHIGNORE 为 OFF,并且 SET ANSI_WARNINGS 为 ON,则当遇到被零除或溢出错误时,SQL Server 仍返回错误信息。

        SET ARITHABORT 的设置是在执行或运行时设置,而不是在分析时设置。

        在计算列或索引视图上创建或操作索引时,SET ARITHABORT 必须为 ON。如果 SET ARITHABORT 为 OFF,计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见 SET 中的"使用 SET 语句时的注意事项"。
        权限 : SET ARITHABORT 权限默认授予所有用户。