我使用NHibernate和SQL Server 2005和我在表中的一个对计算列的索引。
我的问题是,当我插入一条记录到表我得到以下错误:
INSERT失败,因为下列SET选项的设置不正确:“ARITHABORT”
我使用SET ARITHABORT ON;
我以前插入但仍然有此错误。
我使用NHibernate和SQL Server 2005和我在表中的一个对计算列的索引。
我的问题是,当我插入一条记录到表我得到以下错误:
INSERT失败,因为下列SET选项的设置不正确:“ARITHABORT”
我使用SET ARITHABORT ON;
我以前插入但仍然有此错误。
我今天就遇到了这个问题,并得到了它解决。
我在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。
对于计算列在表插入,你需要这些设置选项:
该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 ...
而从应用程序执行存储过程(即更新记录)我也遇到了这个错误,这解决了我的问题: 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
希望这可以帮助别人。
您可以更改数据库选项,所以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;
打开SQL Server MGT Studio中,右键单击服务器名称,选择属性,打开连接选项卡,然后检查算术中止选项