Freigeben über


SET ANSI_WARNINGS (Transact-SQL)

Gibt das ISO-Standardverhalten für verschiedene Fehlerbedingungen an.

Gilt für: SQL Server (SQL Server 2008 bis aktuelle Version), Windows Azure SQL-Datenbank (Ursprüngliche Version bis aktuelle Version).

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

SET ANSI_WARNINGS { ON | OFF }

Hinweise

SET ANSI_WARNINGS betrifft die folgenden Bedingungen:

  • Bei ON wird eine Warnmeldung generiert, wenn NULL-Werte in Aggregatfunktionen, wie z. B. SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP oder COUNT, auftreten. Bei OFF wird keine Warnung ausgegeben.

  • Bei ON bewirken Fehler aufgrund einer Division durch Null und arithmetische Überlauffehler, dass für die Anweisung ein Rollback ausgeführt und eine Fehlermeldung generiert wird. Bei OFF bewirken Fehler aufgrund einer Division durch Null und arithmetische Überlauffehler, dass NULL-Werte zurückgegeben werden. Das Verhalten, bei dem Fehler auf Grund einer Division durch Null oder arithmetische Überlauffehler bewirken, dass NULL-Werte zurückgegeben werden, tritt auf, wenn eine INSERT- oder UPDATE-Operation in einer character-, Unicode- oder binary-Spalte versucht wird, wobei ein neuer Wert länger ist als die maximale Spaltengröße. Wenn SET ANSI_WARNINGS auf ON festgelegt ist, wird der INSERT- oder UPDATE-Vorgang gemäß ISO-Standard abgebrochen. Nachfolgende Leerzeichen werden in Zeichenspalten ignoriert, und nachfolgende Nullen werden in Binärspalten ignoriert. Bei OFF werden Daten auf die Spaltengröße abgeschnitten, und die Anweisung wird erfolgreich ausgeführt.

    Hinweis

    Wenn Abschneidevorgänge in beliebigen Konvertierungen in oder aus binary- oder varbinary-Daten auftreten, werden keine Warnungen oder Fehler ausgelöst, unabhängig von den SET-Optionen.

    Hinweis

    ANSI_WARNINGS wird beim Übergeben von Parametern in einer gespeicherten Prozedur oder einer benutzerdefinierten Funktion oder beim Deklarieren und Festlegen von Variablen in einer Batchanweisung nicht berücksichtigt.Wird beispielsweise eine Variable als char(3) definiert und dann auf einen Wert festgelegt, der länger als drei Zeichen ist, werden die Daten auf die definierte Größe abgeschnitten, und die Anweisung INSERT oder UPDATE wird erfolgreich ausgeführt.

Mithilfe der user options-Option von sp_configure können Sie die Standardeinstellung für ANSI_WARNINGS für alle Verbindungen mit dem Server festlegen. Weitere Informationen finden Sie unter sp_configure (Transact-SQL).

SET ANSI_WARNINGS muss beim Erstellen oder Bearbeiten von Indizes für berechnete Spalten oder indizierte Sichten auf ON festgelegt sein. Wenn SET ANSI_WARNINGS auf OFF festgelegt ist, schlagen die CREATE-, UPDATE-, INSERT- und DELETE-Anweisungen in Tabellen mit Indizes auf berechneten Spalten oder indizierten Sichten fehl. Weitere Informationen zu den erforderlichen Einstellungen der SET-Option mit indizierten Sichten und Indizes für berechnete Spalten finden Sie in den Überlegungen zum Verwenden der SET-Anweisungen unter SET-Anweisungen (Transact-SQL).

SQL Server schließt die ANSI_WARNINGS-Datenbankoption ein. Diese entspricht SET ANSI_WARNINGS. Wenn SET ANSI_WARNINGS auf ON festgelegt ist, werden Fehler- oder Warnmeldungen bei Division durch Null, bei einer für eine Datenbankspalte zu großen Zeichenfolge und bei ähnlichen Fehlern ausgelöst. Wenn SET ANSI_WARNINGS auf OFF festgelegt ist, werden diese Fehler und Warnungen nicht ausgelöst. Der Standardwert in der model-Datenbank für SET ANSI_WARNINGS ist OFF. Wird kein Wert angegeben, gilt die Einstellung von ANSI_WARNINGS. Wird SET ANSI_WARNINGS auf OFF festgelegt, verwendet SQL Server den Wert der is_ansi_warnings_on-Spalte in der sys.databases-Katalogsicht.

ANSI_WARNINGS sollte zum Ausführen von verteilten Abfragen auf ON festgelegt sein.

Der ODBC-Treiber von SQL Server Native Client und der OLE DB-Anbieter von SQL Server Native Client für SQL Server legen für ANSI_WARNINGS beim Herstellen einer Verbindung automatisch ON fest. Diese Einstellung kann in ODBC-Datenquellen und ODBC-Verbindungsattributen konfiguriert werden, die in der Anwendung festgelegt werden, bevor die Verbindung hergestellt wird. Der Standardwert für SET ANSI_WARNINGS für Verbindungen von DB-Library-Anwendungen ist OFF.

Ist SET ANSI_DEFAULTS auf ON festgelegt, so ist SET ANSI_WARNINGS aktiviert.

Die Einstellung von SET ANSI_WARNINGS wird zur Ausführungszeit und nicht zur Analysezeit festgelegt.

Auch wenn SET ARITHABORT oder SET ARITHIGNORE auf OFF und SET ANSI_WARNINGS auf ON festgelegt sind, gibt SQL Server eine Fehlermeldung zurück, wenn ein Fehler aufgrund einer Division durch Null oder ein Überlauffehler auftritt.

Um die aktuelle Einstellung für diese Einstellung anzuzeigen, führen Sie die folgende Abfrage aus.

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

Berechtigungen

Erfordert die Mitgliedschaft in der Rolle public.

Beispiele

Im folgenden Beispiel werden die drei zuvor beschriebenen Situationen gezeigt, wobei SET ANSI_WARNINGS von ON auf OFF wechselt.

USE AdventureWorks2012;
GO

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

Siehe auch

Verweis

INSERT (Transact-SQL)

SELECT (Transact-SQL)

SET-Anweisungen (Transact-SQL)

SET ANSI_DEFAULTS (Transact-SQL)

SESSIONPROPERTY (Transact-SQL)