SQL Server - INSERT由于'ARITHABORT'而失败

时间:2013-02-19 08:59:36

标签: sql-server sql-server-2005 calculated-columns database-indexes

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

我的问题是,当我向该表插入记录时,我收到以下错误:

  

INSERT失败,因为以下SET选项的设置不正确:'ARITHABORT'

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

5 个答案:

答案 0 :(得分:7)

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

我在 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-with-sql-server-arithabort-filtered-indexes-calculated-columns-and-compatibility-mode-of-80/

请注意,此更改是在测试数据库上完成的,所有应用程序都应在生产中进行此类更改之前进行测试。在更换之前,请确保您的DBA没问题。

答案 1 :(得分:6)

对于具有计算列的表上的插入,您需要以下设置选项:

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 ...

答案 2 :(得分:1)

我在从应用程序执行存储过程(更新记录)时遇到此错误,这解决了我的问题: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

希望这有助于某人。

答案 3 :(得分:0)

您可以更改数据库选项,以便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;

答案 4 :(得分:0)

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