在查詢執(zhí)行過程中發(fā)生溢出或被零除錯誤時終止查詢。
SET ARITHABORT { ON | OFF }
如果 SET ARITHABORT 為 ON,則這些錯誤情況將導(dǎo)致查詢或批處理終止。如果在事務(wù)內(nèi)發(fā)生錯誤,則回滾事務(wù)。如果 SET ARITHABORT 為 OFF 并且發(fā)生了這些錯誤之一,則顯示一條警告消息,并給算術(shù)運算的結(jié)果賦以空值。
說明 如果 SET ARITHABORT 和 SET ARITHIGNORE 都沒有設(shè)置,則 Microsoft® SQL Server™ 將在執(zhí)行查詢后返回 NULL 和一條警告信息。
如果 SET ARITHABORT 為 OFF 并且在對表達(dá)式的求值過程中 INSERT、DELETE 或 UPDATE 語句遇到算術(shù)錯誤(溢出、被零除或域錯誤),SQL Server 將插入或更新 NULL 值。如果目標(biāo)列不可為空,則插入或更新操作失敗并且用戶收到錯誤信息。
如果 SET ARITHABORT 或 SET ARITHIGNORE 為 OFF,并且 SET ANSI_WARNINGS 為 ON,則當(dāng)遇到被零除或溢出錯誤時,SQL Server 仍返回錯誤信息。
SET ARITHABORT 的設(shè)置是在執(zhí)行或運行時設(shè)置,而不是在分析時設(shè)置。
在計算列或索引視圖上創(chuàng)建或操作索引時,SET ARITHABORT 必須為 ON。如果 SET ARITHABORT 為 OFF,計算列或索引視圖上帶索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。有關(guān)計算列上的索引視圖和索引所必需的 SET 選項設(shè)置的更多信息,請參見 SET 中的"使用 SET 語句時的注意事項"。
SET ARITHABORT 權(quán)限默認(rèn)授予所有用戶。
下例演示兩種 SET ARITHABORT 設(shè)置下的被零除和溢出錯誤。
-- Create tables t1 and t2 and insert data values.
CREATE TABLE t1 (a tinyint, b tinyint)
CREATE TABLE t2 (a tinyint)
GO
INSERT INTO t1 VALUES (1, 0)
INSERT INTO t1 VALUES (255, 1)
GO
PRINT '*** SET ARITHABORT ON'
GO
-- SET ARITHABORT ON and testing.
SET ARITHABORT ON
GO
PRINT '*** Testing divide by zero during SELECT'
GO
SELECT a/b
FROM t1
GO
PRINT '*** Testing divide by zero during INSERT'
GO
INSERT INTO t2
SELECT a/b
FROM t1
GO
PRINT '*** Testing tinyint overflow'
GO
INSERT INTO t2
SELECT a+b
FROM t1
GO
PRINT '*** Resulting data - should be no data'
GO
SELECT *
FROM t2
GO
-- Truncate table t2.
TRUNCATE TABLE t2
GO
-- SET ARITHABORT OFF and testing.
PRINT '*** SET ARITHABORT OFF'
GO
SET ARITHABORT OFF
GO
-- This works properly.
PRINT '*** Testing divide by zero during SELECT'
GO
SELECT a/b
FROM t1
GO
-- This works as if SET ARITHABORT was ON.
PRINT '*** Testing divide by zero during INSERT'
GO
INSERT INTO t2
SELECT a/b
FROM t1
GO
PRINT '*** Testing tinyint overflow'
GO
INSERT INTO t2
SELECT a+b
FROM t1
GO
PRINT '*** Resulting data - should be 0 rows'
GO
SELECT *
FROM t2
GO
-- Drop tables t1 and t2.
DROP TABLE t1
DROP TABLE t2
GO
相關(guān)文章