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ı
Ayar, SET ARITHABORT sorgu yürütme sırasında taşma veya sıfıra böl hatası olduğunda sorgu durup durmadığını belirler.
ve
SET ANSI_WARNINGS OFFayarladığınızdaSET ARITHABORT ON, aritmetik hatalar partinin sona ermesine neden olur. Hatalar bir işlemde gerçekleşirse, işlem geri alınır.Hem de ve aritmetik bir hata gerçekleşirse, bir uyarı mesajı çıkar (eğer
SET ARITHIGNOREiseON) ve aritmetik işlemin sonucu olurNULL.OFFSET ANSI_WARNINGSSET ARITHABORT
Transact-SQL söz dizimi kuralları
Sözdizimi
Syntax for SQL Server, serverless SQL pool in Azure Synapse Analytics, Microsoft Fabric, SQL database in Microsoft Fabric
SET ARITHABORT { ON | OFF }
Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için söz dizimi
SET ARITHABORT ON
Açıklamalar
Varsayılan, ANSI_WARNINGS ' ON ayarının ARITHABORT işlevsel bir etkisi yoktur. Aritmetik hatalar sorguyu sonlandırır, ancak parti sona ermez (ayar XACT_ABORTOFFolduğu sürece).
Uyarı
SQL Server Management Studio (SSMS) ONiçin varsayılan ARITHABORT ayar , iken bir uygulamadaki istemci bağlantısı varsayılan olarak ARITHABORT OFF. Fonksiyonel bir fark ANSI_WARNINGSONolmasa bile, ARITHABORT ayar yine de önbellek anahtarıdır. Bu nedenle, SSMS ve bir uygulama, kendi varsayılan ayarlarını kullandığında, farklı önbellek girişlerine sahip olabilir ve farklı sorgu planları alabilir, bu da kötü performans gösteren sorguları sorun gidermeyi zorlaştırır. Yani, aynı sorgu uygulamada SSMS'e göre daha yavaş çalışabilir. Management Studio ile soruları giderken her zaman istemci ARITHABORT ayarını eşleştirin.
İfade değerlendirmesi için, hem SET ANSI_WARNINGS hem de SET ARITHABORT bir OFFINSERT, UPDATE, veya DELETE ifade aritmetik, taşma, sıfıra bölme veya alan hatasına rast gelirse, sorgu 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.
' SET ARITHABORT ayarı işlem zamanında gerçekleşir, ayrıştırma zamanında değil.
SET ARITHABORT OFFAzure Synapse Analytics dedicated SQL havuzlarında desteklenmiyor.
Permissions
"" genel "" rolüne üyelik gerektirir.
Mevcut ayarını görüntüleyin ARITHABORT
Mevcut ayarını görüntülemek SET ARITHABORTiçin aşağıdaki T-SQL sorgusunu çalıştırın:
DECLARE @ARITHABORT VARCHAR(3) = 'OFF';
IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON';
SELECT @ARITHABORT AS ARITHABORT;
Örnekler
Aşağıdaki örnek, farklı SET ARITHABORT ayarlarda sıfıra bölme ve taşma hatalarını göstermektedir.
- Script örnek tablolar
t1oluşturur vet2örnek veri değerleri ekler. - Sıfıra böl hata ve aritmetik taşmanın varsayılan davranışını görmek için testler ayarlayın
ANSI_WARNINGS ONve çalıştırın. - Bunun etkisi olacak şekilde ayarlayın
ANSI_WARNINGS OFFARITHABORTveARITHABORT ONayarlayın. Davranışı sıfıra böl hatası ve aritmetik taşma ile testler yapın. - Her ikisini
ANSI_WARNINGS OFFde veARITHABORT OFFayarlayın. Davranışı sıfıra böl hatası ve aritmetik taşma ile testler yapın. - Numune tablolarını temizleyin.
-- SET ARITHABORT
-------------------------------------------------------------------------------
-- Create tables t1 and t2 and insert data values.
CREATE TABLE t1 (
a TINYINT,
b TINYINT
);
CREATE TABLE t2 (
a TINYINT NOT NULL
);
GO
INSERT INTO t1
VALUES (1, 0);
INSERT INTO t1
VALUES (255, 1);
GO
-- First run with ANSI_WARNINGS ON to see the default behavior.
PRINT '*** SET ANSI_WARNINGS ON';
SET ANSI_WARNINGS ON;
SET XACT_ABORT OFF; -- To make sure that we have the default setting for this option.
GO
PRINT '*** Testing divide-by-zero during SELECT';
GO
SELECT a / b AS ab
FROM t1;
PRINT 'This prints, despite the error message.';
GO
PRINT '*** Testing divide-by-zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab
FROM t1;
PRINT 'This prints, despite the error message.';
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab
FROM t1;
PRINT 'This prints, despite the error message.';
GO
PRINT '*** Resulting data - should be no data';
GO
SELECT *
FROM t2;
GO
-- Truncate table t2.
TRUNCATE TABLE t2;
GO
-- Set ANSI_WARNINGS OFF so that ARITHABORT has effect, and set ARITHABORT ON.
PRINT '*** SET ANSI_WARNINGS OFF; SET ARITHABORT ON';
GO
SET ANSI_WARNINGS OFF;
SET ARITHABORT ON;
GO
PRINT '*** Testing divide-by-zero during SELECT';
GO
SELECT a / b AS ab
FROM t1;
PRINT 'This does not print.';
GO
PRINT '*** Testing divide-by-zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab
FROM t1;
PRINT 'This does not print.';
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab
FROM t1;
PRINT 'This does not print.';
GO
PRINT '*** Resulting data - should be 0 rows';
GO
SELECT *
FROM t2;
GO
-- Truncate table t2.
TRUNCATE TABLE t2;
GO
-- Set both ANSI_WARNINGS OFF and ARITHABORT OFF.
PRINT '*** SET ARITHABORT OFF';
GO
SET ARITHABORT OFF;
GO
PRINT '*** Testing divide-by-zero during SELECT';
GO
-- Returns NULL.
SELECT a / b AS ab
FROM t1;
GO
PRINT '*** Testing divide-by-zero during INSERT';
GO
-- Fails with NOT NULL violation.
INSERT INTO t2
SELECT a / b AS ab
FROM t1;
GO
PRINT '*** Testing tinyint overflow';
GO
-- Fails with NOT NULL violation
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 and restore ANSI_WARNINGS
DROP TABLE t1;
DROP TABLE t2;
SET ANSI_WARNINGS ON
GO