【问题标题】:INSERT failed because the following SET options have incorrect settings: 'ARITHABORT'INSERT 失败,因为以下 SET 选项的设置不正确:'ARITHABORT'
【发布时间】:2012-10-08 19:23:06
【问题描述】:

我已经阅读了 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;
}

【问题讨论】:

  • 请提供一些您尝试实现目标但遇到问题的代码,这将有助于获得有用的答案。

标签: java sql-server-2008 jtds


【解决方案1】:

我相信这是查询

  SET ARITHABORT ON;

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

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

  SET ARITHABORT OFF;

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

【讨论】:

  • 您遇到的错误是什么?你能分享一下错误堆栈跟踪顶部的几行吗?
  • 我刚刚遇到了这个support.microsoft.com/kb/305333,它表示 SET ARITHABORT 应该在自己的批处理中运行。
【解决方案2】:

我今天遇到了这个问题并得到了解决。我在 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 同意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-22
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多