Aracılığıyla paylaş


SET ANSI_WARNINGS (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ı

Birkaç hata durumu için ISO standart davranışını belirtir.

Transact-SQL söz dizimi kuralları

Sözdizimi

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

SET ANSI_WARNINGS { ON | OFF }

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

SET ANSI_WARNINGS ON

Açıklamalar

SET ANSI_WARNINGS aşağıdaki koşulları etkiler:

  • ON olarak ayarlandığında, SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP veya COUNT gibi toplam fonksiyonlarda null değerler belirdiğinde, bir uyarı mesajı oluşturulur. KAPALı olarak ayarlandığında herhangi bir uyarı verilmez.

  • ON olarak ayarlandığında, sıfıra bölme ve aritmetik taşma hataları ifadenin geri alınmasına ve hata mesajı oluşturulmasına neden olur. OFF olarak ayarlandığında, sıfıra bölme ve aritmetik taşma hataları null değerlerin geri dönmesine neden olur. Sıfıra bölme veya aritmetik taşma hatasının null değerlerin geri dönmesine neden olduğu davranış, yeni bir değerin uzunluğu sütunun maksimum boyutunu aşan bir karakter, Unicode veya ikili sütunda INSERT veya UPDATE denendiğinde gerçekleşir. SET ANSI_WARNINGS AÇIKSA, ISO standardında belirtildiği gibi INSERT veya UPDATE iptal edilir. Karakter sütunları için takip eden boşluklar, ikili sütunlar için ise takip eden boşlar göz ardı edilir. KAPALı olduğunda, veri sütunun boyutuna kadar kısılır ve ifade başarılı olur.

Uyarı

Herhangi bir ikili veya varbiner veriye dönüşümde kesinti gerçekleştiğinde, SET seçeneklerinden bağımsız olarak uyarı veya hata verilmez.

Uyarı

ANSI_WARNINGS, bir dosyalanmış prosedürde, kullanıcı tanımlı fonksiyonda parametreler iletirken veya toplu bir ifadede değişkenler ilan edilip ayarlanırken dikkate alınmaz. Örneğin, bir değişken char(3) olarak tanımlanırsa ve üç karakterden büyük bir değere ayarlanırsa, veriler tanımlanan boyuta yuvarlanır ve INSERT veya UPDATE deyimi başarılı olur.

Sunucuya tüm bağlantılar için ANSI_WARNINGS varsayılan ayarı ayarlamak için kullanıcı seçenekleri sp_configure seçeneğini kullanabilirsin. Daha fazla bilgi için sp_configure (Transact-SQL) bölümüne bakınız.

ANSI_WARNINGS hesaplanan sütunlarda veya indekslenmiş görünümlerde endeks oluştururken veya manipüle ederken AÇIK olmalıdır. SET ANSI_WARNINGS KAPALıysa, hesaplanmış sütunlarda veya indekslenmiş görünümlerde indeksli tablolarda oluştur, güncelleme, ekleme ve silme ifadeleri başarısız olacaktır. Hesaplanan sütunlarda indekslenmiş görünümler ve indekslerle gerekli SET seçeneği ayarları hakkında daha fazla bilgi için, SET Statements (Transact-SQL) içindeki "SET Statements'ı Kullanırken Dikkate Alınanlar" bölümüne bakınız.

SQL Server, ANSI_WARNINGS veritabanı seçeneğini içerir. Bu, SET ANSI_WARNINGS'a eşdeğerdir. SET ANSI_WARNINGS AÇIKSA, hatalar veya uyarılar sıfıra böl, veritabanı sütunu için fazla büyük bir dizi ve benzeri hatalar şeklinde yükselir. SET ANSI_WARNINGS KAPALı olduğunda, bu hatalar ve uyarılar ortaya çıkmaz. SET ANSI_WARNINGS için veritabanında varsayılan değer model KAPALıdır. Belirtilmemişse, ANSI_WARNINGS ayarı geçerlidir. SET ANSI_WARNINGS KAPALıysa, SQL Server sys.databases katalog görünümündeki is_ansi_warnings_on sütununun değerini kullanır.

Önemli

ANSI_WARNINGS dağıtılmış sorguları çalıştırmak için ON olarak ayarlanmalıdır.

SQL Server Native Client ODBC sürücüsü, SQL Server Native Client OLE DB Provider for SQL Server ve Microsoft JDBC Driver for SQL Server gibi istemciler, bağlantı bayrağı ile ANSI_WARNINGS otomatik olarak ON'a ayar. Bu, ODBC veri kaynaklarında, ODBC bağlantı özelliklerinde, bağlanmadan önce uygulamada ayarlanan şekilde yapılandırılabilir. SET ANSI_WARNINGS için varsayılan nokta, DB-Library uygulamalardan gelen bağlantılar için KAPALıdır. Ek bilgi için, Tablolu Veri Akışı (TDS) protokol spesifikasyonlarındaki LOGIN7'ye bakınız.

ANSI_DEFAULTS AÇIKKEN ANSI_WARNINGS etkinleştirilir.

ANSI_WARNINGS ayarı işleme veya çalışma zamanında tanımlanır, ayrıştırma zamanında değil. Tüm SET ifadeleri gibi, SET ANSI_WARNINGS mevcut oturumu etkiler.

SET ARITHABORT veya SET ARITHIGNORE KAPALI ve SET ANSI_WARNINGS AÇIKSA, SQL Server sıfıra bölme veya taşma hatalarıyla karşılaştığında yine bir hata mesajı döndürür.

Bu ayarın mevcut ayarını görmek için aşağıdaki sorguyu çalıştırın.

DECLARE @ANSI_WARN VARCHAR(3) = 'OFF';  
IF ( (8 & @@OPTIONS) = 8 ) SET @ANSI_WARN = 'ON';  
SELECT @ANSI_WARN AS ANSI_WARNINGS;  

Permissions

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

Örnekler

Aşağıdaki örnek, daha önce bahsedilen üç durumu göstermektedir; SET ANSI_WARNINGS AÇIK ve KAPALI olarak gösterilir.

CREATE TABLE T1   
(  
   a int,   
   b int NULL,   
   c varchar(20)  
);  
GO  
  
SET NOCOUNT ON;  
  
INSERT INTO T1   
VALUES (1, NULL, '')   
      ,(1, 0, '')  
      ,(2, 1, '')  
      ,(2, 2, '');  
  
SET NOCOUNT OFF;  
GO  

Şimdi ANSI_WARNINGS ON'a getir ve test et.

PRINT '**** Setting ANSI_WARNINGS ON';  
GO  
  
SET ANSI_WARNINGS ON;  
GO  
  
PRINT 'Testing NULL in aggregate';  
GO  
SELECT a, SUM(b)   
FROM T1   
GROUP BY a;  
GO  
  
PRINT 'Testing String Overflow in INSERT';  
GO  
INSERT INTO T1   
VALUES (3, 3, 'Text string longer than 20 characters');  
GO  
  
PRINT 'Testing Divide by zero';  
GO  
SELECT a / b AS ab   
FROM T1;  
GO  

Şimdi ANSI_WARNINGS KAPALı konumuna getir ve test et.

PRINT '**** Setting ANSI_WARNINGS OFF';  
GO  
SET ANSI_WARNINGS OFF;  
GO  
  
PRINT 'Testing NULL in aggregate';  
GO  
SELECT a, SUM(b)   
FROM T1   
GROUP BY a;  
GO  
  
PRINT 'Testing String Overflow in INSERT';  
GO  
INSERT INTO T1   
VALUES (4, 4, 'Text string longer than 20 characters');  
GO  
SELECT a, b, c   
FROM T1  
WHERE a = 4;  
GO  
  
PRINT 'Testing Divide by zero';  
GO  
SELECT a / b AS ab   
FROM T1;  
GO  
  
DROP TABLE T1;