如果我在一个存储过程中使用SET ANSI_WARNINGS OFF来消除警告,那么它只会影响该存储过程,而不会影响其他存储过程,这意味着在其他存储过程中,ANSI_WARNINGS仍然有效。如果我想对所有存储过程都关闭它,该怎么办?为什么它是默认的?我怎么会知道呢?
sql server中的其他设置(例如NOCOUNT)也是这样工作的吗?
非常感谢。
如果有人能与我分享关于这些设置的共同特征的文章,那就太好了。
发布于 2012-04-12 21:55:39
可能值得指出的是,它不仅不会影响其他存储过程,而且只会影响SET操作之后的语句
例如,运行此命令,您将看到该选项被关闭,然后打开,然后再次关闭。
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发布于 2011-08-09 15:17:30
来自BOL:
SQL Server包括ANSI_WARNINGS数据库选项。这相当于设置ANSI_WARNINGS。当SET ANSI_WARNINGS为ON时,将在被零除、字符串对于数据库列太大以及其他类似错误中引发错误或警告。当SET ANSI_WARNINGS处于禁用状态时,不会引发这些错误和警告。在模型数据库中,SET ANSI_WARNINGS的默认值为OFF。如果未指定,则应用ANSI_WARNINGS的设置。如果SET ANSI_WARNINGS设置为OFF,SQL Server将使用sys.databases目录视图中is_ansi_warnings_on列的值。
您可以在BOL ( Management Studio中的F1)或MSDN http://msdn.microsoft.com/en-us/library/ms190368.aspx上阅读有关它的信息
NOCOUNT的工作原理是一样的。
https://stackoverflow.com/questions/6989051
复制相似问题