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



我已经阅读了Stackoverflow中关于这个问题的主题,但我真的还没有解决方案。

我的问题是在SQLServer2008中的存储过程中发送字符串或Clob作为XML参数。我正在使用jTDS来连接它。我读到我必须将"ARITHABORT"设置为ON,但我真的不知道在哪里可以做到。

也许在我自己的JAVA会话中,或者在DB中。。。请帮忙!!(很抱歉我的英语很差)

好的!以下是给我错误的方法:

private static final String PR_SV_MUDA_STATUS_EVENTO_CONCLUIDO = "{CALL PR_SV_MUDA_STATUS_EVENTO_CONCLUIDO(?, ?, ?, ?)}";

public String modificaStatus(Connection connection, Integer eventoRobo, String path) throws SQLException {
Connection conn = null;
conn = GenericHibernateDAO.criaConexao();

CallableStatement cs2 = conn.prepareCall(PR_SV_MUDA_STATUS_EVENTO_CONCLUIDO);
cs2.setInt(1, eventoRobo);
cs2.setString(2, null);
cs2.setString(3, null);
cs2.setString(4, path);
cs2.execute();
conn.close();
return null;
}

我相信这是查询

SET ARITHABORT ON;

这需要在存储过程之前运行。要么你可以在获得连接后立即运行它。

处理完成后,您可能需要运行下面的查询。

SET ARITHABORT OFF;

这些查询可以使用java程序中的附加语句来运行。

我今天遇到了这个问题并得到了解决。我在sql server 2008 r2中的一列上创建了一个过滤索引,但在插入时会出现此错误。看到这个问题并没有完全回答,因为在每个插入中总是打开arithaport可能会很乏味。我发现一个博客显示问题出在数据库兼容性级别。将兼容性级别从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对此没有问题。

最新更新