这可能从根本上是愚蠢的,但这里有:ARITHABORT,ARITHIGNORE - 是否需要关闭它?
我有一个存储的过程,我只需要运行而不会引发溢出错误。如果发生溢出,我很满意NULL。
SET ARITHABORT OFF;
SET ARITHIGNORE ON;
这很好,但要我一样,在我的SP的最后再将其打开?
SET ARITHABORT ON;
SET ARITHIGNORE OFF;
是这样的?这些甚至是默认值吗?
另外,我是否需要两个开关来让它忽略溢出错误(在我的情况下,试图把'606006000'放在一个SMALLINT字段中)?
使用Azure DB v12。
应该不需要。 https://msdn.microsoft.com/en-us/library/ms190306.aspx表示在登录会话中ARITHABORT应始终设置为ON,“您应始终在登录会话中将ARITHABORT设置为ON”。这意味着它的会话具体。更好的说明:https://msdn.microsoft.com/en-us/library/ms190356.aspx注意它会影响SESSION,所以只要你在下次查询之前释放会话并获得新会话,它就会被重置自动 – xQbert
@xQbert谢谢,第二个网站是一个很好的阅读。发布此作为答案我会接受它。 – vacip
@xQbert Yep,从第二个链接:“如果在存储过程或触发器中运行SET语句,SET存储过程或触发器返回控制后,SET选项的值将恢复。谢谢,我的google-fu今天很虚弱。 – vacip