Ustaw ANSI_WARNINGS (Transact-SQL)

Określa zachowanie standard ISO dla kilku warunków błędów.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

SET ANSI_WARNINGS { ON | OFF }

Uwagi

Ustaw ANSI_WARNINGS wpływa na następujące warunki:

  • Gdy zestaw na, jeśli wartości null są wyświetlane w wartość zagregowana funkcje takie jak Suma, średnia, MAX, MIN, STDEV, STDEVP, VAR, VARP lub liczba, generowany jest komunikat ostrzegawczy.Gdy zestaw na wyłączone, nie ostrzeżenie.

  • Gdy zestaw na, powodują błędy przepełnienie arytmetyczne i dzielenie przez zero jest generowana instrukcja , aby wycofać i komunikat o błędzie.Gdy zestaw na wyłączone, błędy przepełnienie arytmetyczne i dzielenie przez zero spowodować wartości null mają być zwrócone.Zachowanie, w którym błąd dzielenia przez zero lub przepełnienie arytmetyczne powoduje, że wartości null mają być zwrócone występuje, gdy INSERT lub UPDATE zostanie podjęta próba character, Unicode, lub binary kolumna , w której długość nową wartość przekracza maksymalny rozmiar kolumna.Jeśli ANSI_WARNINGS ustawienie jest włączone, INSERT lub UPDATE zostanie anulowane jak określono w normie ISO.Końcowe spacje są ignorowane w wypadku kolumn znaków i końcowe wartości Null są ignorowane w wypadku kolumn binarny.Kiedy, dane zostaną obcięte do rozmiaru kolumna i instrukcja zakończy się pomyślnie.

    Ostrzeżenie

    Kiedy obcięte w żadnej konwersji do lub z binary lub varbinary danych, nie błąd lub ostrzeżenie zostało wydane, niezależnie od ustawienia opcji.

    Ostrzeżenie

    Nie jest honorowane ANSI_WARNINGS, przekazując parametry procedura składowana, zdefiniowanej przez użytkownika funkcjalub deklarowania i ustawiania zmiennych winstrukcja partia. Na przykład, jeśli zmienna jest zdefiniowana jako char(3), a następnie zestaw na wartość większą niż trzy znaki, dane są obcięte zdefiniowany rozmiar i WSTAW lub instrukcja UPDATE zakończy się pomyślnie.

Można użyć user options opcji sp_configure zestaw domyślne ustawienie ANSI_WARNINGS dla wszystkich połączeń do serwera.Aby uzyskać więcej informacji, zobacz sp_configure (języka Transact-SQL) lub Ustawianie opcji konfiguracji serwera.

Ustaw ANSI_WARNINGS musi być ON podczas tworzenia lub manipulowania indeksów dla kolumny obliczanej lub widoki indeksowane.Jeśli USTAWIONA ANSI_WARNINGS jest wyłączona, instrukcji CREATE, UPDATE, INSERT i DELETE na tabelach z indeksów dla kolumny obliczanej lub widoki indeksowane nie powiedzie się.Aby uzyskać więcej informacji o wymagane ustawienia opcji zestaw Widoki indeksowane i indeksy kolumny obliczane zobacz "Zagadnienia podczas możesz użycia zestawu sprawozdań" in ZESTAW instrukcji (Transact-SQL).

SQL Serverzawiera ANSI_WARNINGS opcji bazy danych.Jest to równoważne ANSI_WARNINGS zestawu.Ustaw ANSI_WARNINGS jest włączone, są wywoływane błędy lub ostrzeżenia dzielenie przez zero, ciąg za duży dla kolumnabazy danych i inne podobne błędy.Gdy ANSI_WARNINGS USTAWIONY jest wyłączona, te błędy i ostrzeżenia nie są wywoływane.Wartość domyślna w model bazy danych, aby USTAWIĆ ANSI_WARNINGS jest wyłączony.Jeśli nie określono, ustawienie ANSI_WARNINGS dotyczy.Jeśli USTAWIONA ANSI_WARNINGS jest wyłączona, SQL Server używa wartości is_ansi_warnings_on kolumna w sys.databases katalogu widoku.Aby uzyskać więcej informacji, zobacz Ustawianie opcji bazy danych.

ANSI_WARNINGS powinno być zestaw na wykonywanie kwerend rozproszonych.

SQL Server Sterownika ODBC macierzystym klienta i SQL Server macierzystego klienta OLE DB Provider for SQL Server automatycznie zestaw ANSI_WARNINGS on podczas łączenia.Można również skonfigurować w źródeł danych ODBC w atrybuty połączenia ODBC lub OLE DB połączenia właściwości zestaw w aplikacji przed połączeniem.Domyślne ustawienie ANSI_WARNINGS jest wyłączona dla połączeń z DB— aplikacje biblioteczne.

Gdy ustawienie ANSI_DEFAULTS jest włączone, ustawienie ANSI_WARNINGS jest włączona.

Ustawienie ANSI_WARNINGS USTAWIONY jest zestaw na wykonać lub czas jednostkowy i nie analizować czas.

Jeśli zestawu ARITHABORT lub ARITHIGNORE USTAWIONA jest wyłączenie i zestawu ANSI_WARNINGS jest włączone, SQL Server nadal zwraca komunikat o błędzie, gdy wystąpią dzielenie przez zero lub przepełnienie błędy.

Uprawnienia

Wymaga członkostwa w public rolę.

Przykłady

Poniższy przykład ilustruje trzech sytuacjach wymienionych wcześniej, z zestawu ANSI_WARNINGS on i OFF.

USE AdventureWorks2008R2;
GO

CREATE TABLE T1 (
   a INT, 
   b INT NULL, 
   c VARCHAR(20)
);
GO

SET NOCOUNT ON

INSERT INTO T1 
VALUES (1, NULL, '');
INSERT INTO T1 
VALUES (1, 0, '');
INSERT INTO T1 
VALUES (2, 1, '');
INSERT INTO T1 
VALUES (2, 2, '');

SET NOCOUNT OFF;
GO
  
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
  
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