Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft 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