我正在查看之前编写的一些代码,在调用存储过程之前,在数据库帮助器中设置ARITHABORT ON
。
根据我的理解,如果ANSI_Warnings为ON,则对于2005年之后的SQL Server版本不需要这样做。
我还需要设置吗?它是否提供了性能优势?
编辑1:根据this文章,我不需要设置它,但我找不到另一个明确的答案。
答案 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上也是如此。
如果您的数据库较旧并且使用升级脚本推迟了数据,则会发生这种情况。在过去,默认设置不是“开启”,因此较旧的数据库可能仍然使用错误的默认值。