SET ANSI_WARNINGS OFF的范围

时间:2011-08-08 21:51:31

标签: sql-server

如果我在一个存储过程中有SET ANSI_WARNINGS OFF来消除警告,它只会影响该存储过程并且对其他存储过程没有影响,这意味着在其他存储过程中,{{1}仍然在。 如果我想为所有存储过程关闭它怎么办? 为何默认?我怎么知道呢?

sql server中的其他设置(例如ANSI_WARNINGS)的工作方式是否相同?

非常感谢。

如果有人可以与我分享有关这些设置的共同特征的文章,那就太棒了。

2 个答案:

答案 0 :(得分:3)

值得指出的是,它不仅不会影响其他存储过程,它只影响SET操作后的语句

e.g。运行此选项,您将看到该选项已关闭然后再打开然后再关闭。

CREATE TABLE test
(
    intvalue int NULL
) 
INSERT INTO test VALUES (1)
INSERT INTO test VALUES (NULL)
SET ANSI_WARNINGS OFF
SELECT COUNT(intvalue) FROM test
-- (1 row(s) affected)
SET ANSI_WARNINGS ON
SELECT COUNT(intvalue) FROM test
-- (1 row(s) affected)
-- Warning: Null value is eliminated by an aggregate or other SET operation.
SET ANSI_WARNINGS OFF
SELECT COUNT(intvalue) FROM test
-- (1 row(s) affected)
DROP TABLE test

答案 1 :(得分:2)

来自BOL:

  

SQL Server包含ANSI_WARNINGS数据库选项。这是   相当于SET ANSI_WARNINGS。当SET ANSI_WARNINGS为ON时,出错   或者警告是在被零除的情况下提出的,字符串太大了   数据库列和其他类似错误。当SET ANSI_WARNINGS是   关闭,不会引发这些错误和警告。中的默认值   SET ANSI_WARNINGS的模型数据库为OFF。如果没有指定,   适用ANSI_WARNINGS的设置。如果SET ANSI_WARNINGS为OFF,则为SQL   服务器使用的是is_ansi_warnings_on列的值   sys.databases目录视图。

您可以在BOL(管理工作室中的F1)或MSDN http://msdn.microsoft.com/en-us/library/ms190368.aspx

上阅读相关内容

NOCOUNT也是如此。