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

S.M*_*min 9 sql-server sql-server-2005 calculated-columns database-indexes

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

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

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

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

muh*_*mud 8

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

NUMERIC_ROUNDABORT选项必须设置为OFF,并且以下选项必须设置为ON:

ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS
ARITHABORT
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIER
Run Code Online (Sandbox Code Playgroud)

尝试在插入之前添加此内容:

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

insert ...
Run Code Online (Sandbox Code Playgroud)


Bra*_*hak 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-与-SQL服务器ARITHABORT滤波的索引计算柱和兼容模式-的-80 /

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