2011-08-08 292 views
2

如果我在一個存儲過程中有SET ANSI_WARNINGS OFF以擺脫警告,它只會影響該存儲過程並且不會影響其他存儲過程,這意味着在其他存儲過程中,ANSI_WARNINGS仍然是上。 如果我想關閉所有存儲過程,該怎麼辦? 爲什麼它是默認的?我怎麼能知道?SET的範圍ANSI_WARNINGS OFF

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

非常感謝。

如果有人能夠與我分享有關這些設置的共同特徵的文章,那將是非常棒的。

回答

1

從BOL:

SQL Server包含ANSI_WARNINGS數據庫選項。這是相當於SET ANSI_WARNINGS的 。當SET ANSI_WARNINGS爲ON時,錯誤 或警告會被零除,字符串太大而無法訪問 數據庫列以及其他類似錯誤。當SET ANSI_WARNINGS爲 OFF時,不會引發這些錯誤和警告。默認值爲 SET ANSI_WARNINGS的模型數據庫爲OFF。如果未指定,則應用ANSI_WARNINGS的 設置。如果SET ANSI_WARNINGS爲OFF,則SQL 服務器使用 sys.databases目錄視圖中的is_ansi_warnings_on列的值。

您可以在BOL讀到它(Management Studio中F1)或MSDN http://msdn.microsoft.com/en-us/library/ms190368.aspx

NOCOUNT的工作原理相同。

3

這可能是值得點出的是,它不僅不會影響其他的存儲過程,它不僅影響下面的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 
相關問題