SQL服务器 - INSERT失败,因为“ARITHABORT”的(SQL Server - IN

2019-07-20 03:22发布

我使用NHibernate和SQL Server 2005和我在表中的一个对计算列的索引。

我的问题是,当我插入一条记录到表我得到以下错误:

INSERT失败,因为下列SET选项的设置不正确:“ARITHABORT”

我使用SET ARITHABORT ON; 我以前插入但仍然有此错误。

Answer 1:

我今天就遇到了这个问题,并得到了它解决。

我在SQL Server 2008 R2上创建一个列筛选的索引,但在插入时会出现此错误。

我看到了这个问题并没有完全回答,因为总是它可能是乏味的SET ARITHABORT ON在每一次插入。

我发现了一个博客,显示了它是这是问题的数据库兼容级别。 我改变了兼容性级别从80(2000)100(2008)和问题得到了解决。 不知道是否改变兼容级别90将解决这个与否,但值得一试。

SQL Server兼容水平,并命令改变这里。 http://msdn.microsoft.com/en-us/library/bb510680.aspx

如果这不工作,或者你不能改变兼容模式,还有另一种解决方法由我在这里谈论的博客添加触发器http://chrismay.org/2013/05/23/interesting-problem-与-SQL服务器ARITHABORT滤波的索引计算柱和兼容模式-的-80 /

需要注意的是,这种变化是一个测试数据库上进行,并且所有应用程序在生产中应作出改变这样之前进行测试。 确保这是确定与变更前过你的DBA。



Answer 2:

对于计算列在表插入,你需要这些设置选项:

该NUMERIC_ROUNDABORT选项必须设置为OFF,且下列选项必须设置为ON:

ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS
ARITHABORT
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIER

试试你的插入之前添加此:

set NUMERIC_ROUNDABORT off
set ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER on

insert ...


Answer 3:

而从应用程序执行存储过程(即更新记录)我也遇到了这个错误,这解决了我的问题: https://support.microsoft.com/en-us/kb/305333

所以基本上,我执行我的存储过程前加入这组验证码

sqlConn = New SqlConnection(connectionString)
If sqlConn.State = ConnectionState.Closed Then sqlConn.Open()

sqlCmd = New SqlCommand()
With sqlCmd
   .Connection = sqlConn
   .CommandType = CommandType.text
   .CommandText = "SET ARITHABORT ON"
   .ExecuteNonQuery()

   .CommandType = CommandType.StoredProcedure
   .CommandText = "MY PROCEDURE"
   .ExecuteNonQuery()
End With

希望这可以帮助别人。



Answer 4:

您可以更改数据库选项,所以SET选项是全局可用

    ALTER DATABASE [$(DatabaseName)]
        SET ANSI_NULLS OFF,
            ANSI_PADDING OFF,
            ANSI_WARNINGS OFF,
            ARITHABORT OFF,
            CONCAT_NULL_YIELDS_NULL OFF,
            NUMERIC_ROUNDABORT OFF,
            QUOTED_IDENTIFIER OFF 
        WITH ROLLBACK IMMEDIATE;


Answer 5:

打开SQL Server MGT Studio中,右键单击服务器名称,选择属性,打开连接选项卡,然后检查算术中止选项



文章来源: SQL Server - INSERT failed because of 'ARITHABORT'