指定幾種錯(cuò)誤情況下的 SQL-92 標(biāo)準(zhǔn)行為。
SET ANSI_WARNINGS { ON | OFF }
SET ANSI_WARNINGS 影響以下情況:
說(shuō)明 在 binary 或 varbinary 數(shù)據(jù)轉(zhuǎn)換中發(fā)生截?cái)鄷r(shí),不管 SET 選項(xiàng)的設(shè)置是什么,都不發(fā)出警告或錯(cuò)誤信息。
可以使用 sp_configure 的 user options 選項(xiàng),為與服務(wù)器的所有連接設(shè)置 ANSI_WARNINGS 的默認(rèn)設(shè)置。有關(guān)更多信息,請(qǐng)參見 sp_configure 或設(shè)置配置選項(xiàng)。
創(chuàng)建或操作索引視圖或計(jì)算列上的索引時(shí),SET ANSI_WARNINGS 必須為 ON。如果 SET ANSI_WARNINGS 為 OFF,計(jì)算列或索引視圖上帶索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 語(yǔ)句將失敗。有關(guān)計(jì)算列上的索引視圖和索引所必需的 SET 選項(xiàng)設(shè)置的更多信息,請(qǐng)參見 SET 中的"使用 SET 語(yǔ)句時(shí)的注意事項(xiàng)"。
Microsoft® SQL Server™ 包含 ANSI warnings 數(shù)據(jù)庫(kù)選項(xiàng),該選項(xiàng)等同于 SET ANSI_WARNINGS。當(dāng) SET ANSI_WARNINGS 為 ON 時(shí),如發(fā)生被零除、字符串超出數(shù)據(jù)庫(kù)列及其它類似錯(cuò)誤,將產(chǎn)生錯(cuò)誤信息或警告。當(dāng) SET ANSI_WARNINGS 為 OFF 時(shí),不產(chǎn)生這些錯(cuò)誤和警告。model 數(shù)據(jù)庫(kù)中的 SET ANSI_WARNINGS 默認(rèn)值是 OFF。如果未指定,則應(yīng)用 ANSI warnings 設(shè)置。如果 SET ANSI_WARNINGS 為 OFF,SQL Server 將使用 sp_dboption 的 ANSI warnings 設(shè)置。有關(guān)更多信息,請(qǐng)參見 sp_dboption 或設(shè)置數(shù)據(jù)庫(kù)選項(xiàng)。
在執(zhí)行分布式查詢時(shí)應(yīng)將 ANSI_WARNINGS 設(shè)置為 ON。
SQL Server ODBC 驅(qū)動(dòng)程序和用于 SQL Server 的 Microsoft OLE DB 提供程序在連接時(shí)自動(dòng)將 ANSI_WARNINGS 設(shè)置為 ON。這可以在 ODBC 數(shù)據(jù)源、ODBC 連接特性或 OLE DB 連接屬性(它們?cè)谶B接前在應(yīng)用程序中設(shè)置)中進(jìn)行配置。對(duì)來(lái)自 DB-Library 應(yīng)用程序的連接,SET ANSI_WARNINGS 默認(rèn)為 OFF。
當(dāng) SET ANSI_DEFAULTS 為 ON 時(shí),將啟用 SET ANSI_WARNINGS。
SET ANSI_WARNINGS 的設(shè)置是在執(zhí)行或運(yùn)行時(shí)設(shè)置,而不是在分析時(shí)設(shè)置。
如果 SET ARITHABORT 或 SET ARITHIGNORE 為 OFF,并且 SET ANSI_WARNINGS 為 ON,則當(dāng)遇到被零除或溢出錯(cuò)誤時(shí),SQL Server 仍返回錯(cuò)誤信息。
SET ANSI_WARNINGS 權(quán)限默認(rèn)授予所有用戶。
下例演示 SET ANSI_WARNINGS 為 ON 和 OFF 時(shí)的上述三種情況。
USE pubs
GO
CREATE TABLE T1 ( a int, b int NULL, c varchar(20) )
GO
SET NOCOUNT ON
GO
INSERT INTO T1 VALUES (1, NULL, '')
INSERT INTO T1 VALUES (1, 0, '')
INSERT INTO T1 VALUES (2, 1, '')
INSERT INTO T1 VALUES (2, 2, '')
GO
SET NOCOUNT OFF
GO
PRINT '**** Setting ANSI_WARNINGS ON'
GO
SET ANSI_WARNINGS ON
GO
PRINT 'Testing NULL in aggregate'
GO
SELECT a, SUM(b) FROM T1 GROUP BY a
GO
PRINT 'Testing String Overflow in INSERT'
GO
INSERT INTO T1 VALUES (3, 3, 'Text string longer than 20 characters')
GO
PRINT 'Testing Divide by zero'
GO
SELECT a/b FROM T1
GO
PRINT '**** Setting ANSI_WARNINGS OFF'
GO
SET ANSI_WARNINGS OFF
GO
PRINT 'Testing NULL in aggregate'
GO
SELECT a, SUM(b) FROM T1 GROUP BY a
GO
PRINT 'Testing String Overflow in INSERT'
GO
INSERT INTO T1 VALUES (4, 4, 'Text string longer than 20 characters')
GO
PRINT 'Testing Divide by zero'
GO
SELECT a/b FROM T1
GO
DROP TABLE T1
GO
相關(guān)文章