我使用NHibernate和SQL Server 2005,我在其中一个表的计算列上创建了一个索引。
我的问题是当我往该表插入一条记录时,我会收到以下错误:
由于以下SET选项设置不正确,INSERT失败:'ARITHABORT'
我在插入之前使用了SET ARITHABORT ON;
,但仍然出现这个错误。
我使用NHibernate和SQL Server 2005,我在其中一个表的计算列上创建了一个索引。
我的问题是当我往该表插入一条记录时,我会收到以下错误:
由于以下SET选项设置不正确,INSERT失败:'ARITHABORT'
我在插入之前使用了SET ARITHABORT ON;
,但仍然出现这个错误。
对于具有计算列的表格插入,您需要设置以下选项:
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 ...
SET ARITHABORT ON
,因此我发现这个问题没有完全解决。在应用程序中执行更新记录的存储过程时,我也遇到了这个错误,这个链接解决了我的问题: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;
ARITHABORT
设置为ON
。 - S.M.AminARITHABORT
创建。在创建时应该设置为“ON”吗?我该如何做到这一点? - S.M.Amin