1

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

我的问题是在 SQL Server 2008 的存储过程中将字符串或 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;
}
4

2 回答 2

1

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

于 2014-09-17T03:39:22.870 回答
1

我相信这是查询

  SET ARITHABORT ON;

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

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

  SET ARITHABORT OFF;

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

于 2012-10-08T19:55:26.893 回答