SET SET ARITHABORT (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

Sorgu yürütme sırasında taşma veya sıfıra böl hatası meydana geldiğinde sorgu sona erer.

Transact-SQL söz dizimi kuralları

Sözdizimi

Syntax for SQL Server, serverless SQL pool in Azure Synapse Analytics, Microsoft Fabric

SET ARITHABORT { ON | OFF }

Syntax for Azure Synapse Analytics and Analytics Platform System (PDW)

SET ARITHABORT ON

Açıklamalar

Giriş oturumlarınızda her zaman ON'a ayarlayın ARITHABORT . OFF olarak ayarlanması ARITHABORT sorgu optimizasyonunu olumsuz etkileyebilir ve performans sorunlarına yol açabilir.

Uyarı

SQL Server Management Studio için varsayılan ARITHABORT ayar ON'dur. İstemci uygulamaları ARITHABORT OFF olarak ayarlandığında farklı sorgu planları alabilir, bu da kötü çalışan sorguların sorun giderilmesini zorlaştırır. Yani, aynı sorgu Management Studio'da hızlı çalışabilir ama uygulamada yavaş olabilir. Management Studio ile soruları giderken her zaman istemci ARITHABORT ayarını eşleştirin.

ANSI UYARILARI AÇIK olduğunda SET ARITHABORTSET , bu hata koşulları sorguyu sonlandırır.

AKONMUŞ ve SET ANSI UYARILARI KAPALI olduğundaSET ARITHABORT, bu hata koşulları partinin sona ermesine neden olur. Hatalar bir işlemde gerçekleşirse, işlem geri alınır. KAPALı SETSET ARITHABORT olduğunda ve bu hatalardan biri gerçekleştiğinde, bir uyarı mesajı çıkar ve aritmetik işlemin sonucu olur.NULL

Eğer SET ARITHABORT ve SET ANSI UYARILARI KAPALIYSA ve bu hatalardan biri gerçekleşirse, bir uyarı mesajı görünür ve aritmetik işlemin sonucu olur.NULL

Uyarı

Eğer ne SET ARITHABORT de SETSET ARITHIGNORE ON'da değilse, SQL Server geri döner NULL ve sorgu çalıştırıldıktan sonra bir uyarı mesajı gelir.

Değeri ANSI_WARNINGS ON olduğunda ve veritabanı uyumluluk seviyesi 90 veya daha yüksek olduğunda, ARITHABORT değer ayarı ne olursa olsun örtük olarak ON'dur. Veritabanı uyumluluk seviyesi 80 veya daha öncesine ayarlanmışsa, seçenek ARITHABORT açıkça ON'a ayarlanmalıdır.

İfade değerlendirmesi için, SET ARITHABORT eğer KAPALı ve bir INSERT, UPDATE, veya DELETE ifade aritmetik, taşma, sıfıra bölme veya alan hatası ile karşılaşırsa, SQL Server bir NULL değer ekler veya günceller. Hedef sütun nullable değilse, ekleme veya güncelleme eylemi başarısız olur ve kullanıcı hata görür.

Herhangi biri SET ARITHABORT KAPALı SETSET ARITHIGNORE ve SETSET ANSI_WARNINGS AKONİ, SQL Server sıfıra böl veya taşma hatalarıyla karşılaştığında yine de hata mesajı döndürür.

SET SET ARITHABORT IF ifadesinin Boolean koşulu değerlendirilirken OFF olduğunda ve bir iptal hatası meydana geldiğinde, FALSE dalı çalıştırılır.

SET SET ARITHABORT hesaplanan sütunlarda veya indekslenmiş görünümlerde endeks oluştururken veya değiştirirken AKONIK olmalıdır. Eğer SET ARITHABORT KAPALıysa, CREATE, UPDATE, INSERTve DELETE hesaplanmış sütunlarda veya indekslenmiş görünümlerde indeksli tablolardaki ifadeler başarısız olur.

' SETSET ARITHABORT ayarı işlem zamanında gerçekleşir, ayrıştırma zamanında değil.

SET SET ARITHABORTOFF, Azure Synapse Analytics dedicated SQL havuzlarında desteklenmemektedir.

Mevcut ayarını görmek SETSET ARITHABORTiçin aşağıdaki sorguyu çalıştırın:

DECLARE @ARITHABORT VARCHAR(3) = 'OFF';  
IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON';  
SELECT @ARITHABORT AS ARITHABORT;  

Permissions

"" genel "" rolüne üyelik gerektirir.

Örnekler

Aşağıdaki örnek, ayarlara sahip sıfıra bölme ve taşma hatalarını SET ARITHABORT göstermektedir.

-- 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