set ARITHABORT (Transact-sql)

Sorgu yürütme sırasında taşma veya tarafından sıfıra bölme hatası oluştuğunda, bir sorgu sona erer.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

SET ARITHABORT { ON | OFF }
[ ; ]

Açıklamalar

set ARITHABORT on set ANSI uyarılar on ise, bu hata koşulları sorguyu bitirmek için neden. set ARITHABORT on ve off set ANSI uyarılar olduğunu, bu hata koşulları toplu sonlandırmak için neden. Bir işlemde hata oluşursa, işlem geri alınır. set ARITHABORT kapalı'dır ve bu hatalar biri oluşur, bir uyarı iletisi görüntülenir ve aritmetik işlemin sonucu null atanır.

[!NOT]

Ne set ARITHABORT veya ARITHIGNORE ayarlanmışsa, SQL Servernull döndürür ve sorgu yürütüldükten sonra bir uyarı iletisi verir.

Veritabanı uyumluluk düzeyi 90 ayarlandığında ANSI_WARNINGS on olarak ayarlanması, örtülü ARITHABORT on olarak ayarlar. Veritabanı uyumluluk düzeyi 80 veya daha önce ayarlarsanız, ARITHABORT seçeneği açıkça on olarak ayarlanmalıdır.

set ARITHABORT kapalı, INSERT, olduğunda ifade değerlendirme sırasında aritmetik hata, taşma, sıfır ile bölme veya bir etki alanı hata, delete veya update deyimi karşılaştığında SQL Serverekler veya null değeri güncelleştirir. Hedef sütunu null değilse, Ekle veya Güncelleştir eylemi başarısız olur ve kullanıcı bir hata alır.

set ARITHABORT veya ARITHIGNORE kapalı'dır ve set ANSI_WARNINGS on, SQL Serverhala hata iletisi tarafından sıfıra bölme veya taşma hataları karşılaşıyor döndürür.

set ARITHABORT off için ayarlanır ve IF deyimini Boole koşul değerlendirilmesi sırasında durdurma hata oluşursa, yanlış şube yürütüldü.

Oluşturma veya değiştirme dizinler üzerinde hesaplanan sütunlar veya dizin oluşturulmuş görünümler set ARITHABORT on olması gerekir. set ARITHABORT kapalı ise, Oluştur, Güncelleştir, Ekle ve Sil deyimlerinin tablolarda dizinler üzerinde hesaplanan sütunlar veya dizin oluşturulmuş görünümler ile başarısız olur.

set ARITHABORT ayarı ayarlanır yürütme veya zaman değil ayrıştırma saati ve çalıştırın.

İzinler

Üyelik Genel rolü.

Örnekler

Aşağıdaki örnek, her ikisi de sıfır ile bölme ve taşma hataları gösterir SET ARITHABORTayarları.

-- SET ARITHABORT
-------------------------------------------------------------------------------
-- 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 AS ab 
FROM t1;
GO

PRINT '*** Testing divide by zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab  
FROM t1;
GO

PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab 
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 AS ab  
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 AS ab  
FROM t1;
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2;
SELECT a + b AS ab 
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

-- SET ARITHABORT
-------------------------------------------------------------------------------
-- 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 AS ab 
FROM t1;
GO

PRINT '*** Testing divide by zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab  
FROM t1;
GO

PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab 
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 AS ab  
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 AS ab  
FROM t1;
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2;
SELECT a + b AS ab 
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

Ayrıca bkz.

Başvuru

Deyimiyle (Transact-sql) bırak

set ARITHIGNORE (Transact-sql)

SESSIONPROPERTY (Transact-sql)