如果我在一个存储过程中有SET ANSI_WARNINGS OFF
来消除警告,它只会影响该存储过程并且对其他存储过程没有影响,这意味着在其他存储过程中,{{1}仍然在。
如果我想为所有存储过程关闭它怎么办?
为何默认?我怎么知道呢?
sql server中的其他设置(例如ANSI_WARNINGS
)的工作方式是否相同?
非常感谢。
如果有人可以与我分享有关这些设置的共同特征的文章,那就太棒了。
答案 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也是如此。