我应该在SQL Server 2014中设置ARITHABORT

时间:2015-12-16 13:45:36

标签: sql sql-server

我正在查看之前编写的一些代码,在调用存储过程之前,在数据库帮助器中设置ARITHABORT ON

根据我的理解,如果ANSI_Warnings为ON,则对于2005年之后的SQL Server版本不需要这样做。

我还需要设置吗?它是否提供了性能优势?

编辑1:根据this文章,我不需要设置它,但我找不到另一个明确的答案。

2 个答案:

答案 0 :(得分:2)

如果查看SET ARITHABORT,将ANSI_WARNINGS设置为ON将自动将ARITHABORT设置为ON,兼容级别为90或更高(SQL Server 2005或更高版本):

  

当数据库兼容级别设置为90或更高时,将ANSI_WARNINGS设置为ON会将ARITHABORT隐式设置为ON。如果数据库兼容级别设置为80或更早,则必须将ARITHABORT选项显式设置为ON。

对于兼容级别80,您必须手动设置它。

这也可能是您的软件在打开连接时将其设置为关闭,唯一的解决方案是将其添加到过程中。

升级到兼容级别90或更高级别后,您应该运行:

#ifndef MODEL_MANGO_HPP_
#define MODEL_MANGO_HPP_

namespace std {

class Mango {
public:
    Mango();
    virtual ~Mango();
};

} /* namespace std */

#endif /* MODEL_MANGO_HPP_ */

如果将删除执行计划并重新编译程序。

在创建新计划之前,还可以运行这两个命令:

#include "Mango.hpp"
namespace std {
Mango::Mango() {
    // TODO Auto-generated constructor stub
}
Mango::~Mango() {
    // TODO Auto-generated destructor stub
}
} /* namespace std */

我认为这个数据库可能是旧的(SQL Server 2000或更早版本),也可以运行它:

DBCC FREEPROCCACHE

DBCC CHECKDB将检查数据库及其使用的数据(类型),并确保新版本和兼容级别一切正常。

答案 1 :(得分:0)

在我们的数据库中,我们有一些运行的SP,即使在以后的SQL Server上也是如此。

如果您的数据库较旧并且使用升级脚本推迟了数据,则会发生这种情况。在过去,默认设置不是“开启”,因此较旧的数据库可能仍然使用错误的默认值。