SET ANSI_WARNINGS (Transact-SQL)SET ANSI_WARNINGS (Transact-SQL)

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Gibt das ISO-Standardverhalten für verschiedene Fehlerbedingungen an.Specifies ISO standard behavior for several error conditions.

Symbol für Themenlink Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server and Azure SQL Database
  
SET ANSI_WARNINGS { ON | OFF }
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse

SET ANSI_WARNINGS ON

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

BemerkungenRemarks

SET ANSI_WARNINGS betrifft die folgenden Bedingungen:SET ANSI_WARNINGS affects the following conditions:

  • 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.When set to ON, if null values appear in aggregate functions, such as SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP, or COUNT, a warning message is generated. Bei OFF wird keine Warnung ausgegeben.When set to OFF, no warning is issued.

  • 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.When set to ON, the divide-by-zero and arithmetic overflow errors cause the statement to be rolled back and an error message is generated. Bei OFF bewirken Fehler aufgrund einer Division durch Null und arithmetische Überlauffehler, dass NULL-Werte zurückgegeben werden.When set to OFF, the divide-by-zero and arithmetic overflow errors cause null values to be returned. Das Verhalten, bei dem Fehler aufgrund einer Division durch 0 (null) oder arithmetischer Überlauffehler bewirken, dass NULL-Werte zurückgegeben werden, tritt auf, wenn ein INSERT- oder UPDATE-Vorgang in einer Spalte des Typs character , Unicode oder binary versucht wird und die Länge eines der neuen Werte die maximale Spaltengröße überschreitet.The behavior in which a divide-by-zero or arithmetic overflow error causes null values to be returned occurs if an INSERT or UPDATE is tried on a character , Unicode, or binary column in which the length of a new value exceeds the maximum size of the column. Wenn SET ANSI_WARNINGS auf ON festgelegt ist, wird der INSERT- oder UPDATE-Vorgang gemäß ISO-Standard abgebrochen.If SET ANSI_WARNINGS is ON, the INSERT or UPDATE is canceled as specified by the ISO standard. Nachfolgende Leerzeichen werden in Zeichenspalten ignoriert, und nachfolgende Nullen werden in Binärspalten ignoriert.Trailing blanks are ignored for character columns and trailing nulls are ignored for binary columns. Bei OFF werden Daten auf die Spaltengröße abgeschnitten, und die Anweisung wird erfolgreich ausgeführt.When OFF, data is truncated to the size of the column and the statement succeeds.

Hinweis

Wenn Abschneidevorgänge bei beliebigen Konvertierungen in oder von binary - oder varbinary -Daten auftreten, werden keine Warnungen oder Fehler ausgelöst, unabhängig von den SET-Optionen.When truncation occurs in any conversion to or from binary or varbinary data, no warning or error is issued, regardless of SET options.

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.ANSI_WARNINGS is not honored when passing parameters in a stored procedure, user-defined function, or when declaring and setting variables in a batch statement. 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.For example, if a variable is defined as char(3) , and then set to a value larger than three characters, the data is truncated to the defined size and the INSERT or UPDATE statement succeeds.

Mithilfe der Benutzeroptionen-Option von sp_configure können Sie die Standardeinstellung für ANSI_WARNINGS für alle Verbindungen mit dem Server festlegen.You can use the user options option of sp_configure to set the default setting for ANSI_WARNINGS for all connections to the server. Weitere Informationen finden Sie weiter unten in diesem Thema unter sp_configure (Transact-SQL)noch nicht kennen.For more information, see sp_configure (Transact-SQL).

ANSI_WARNINGS muss beim Erstellen oder Bearbeiten von Indizes für berechnete Spalten oder indizierte Sichten auf ON festgelegt sein.ANSI_WARNINGS must be ON when you are creating or manipulating indexes on computed columns or indexed views. 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.If SET ANSI_WARNINGS is OFF, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail. 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).For more information about required SET option settings with indexed views and indexes on computed columns, see "Considerations When You Use the SET Statements" in SET Statements (Transact-SQL).

SQL ServerSQL Server schließt die ANSI_WARNINGS-Datenbankoption ein.includes the ANSI_WARNINGS database option. Diese entspricht SET ANSI_WARNINGS.This is equivalent to 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.When SET ANSI_WARNINGS is ON, errors or warnings are raised in divide-by-zero, string too large for database column, and other similar errors. Wenn SET ANSI_WARNINGS auf OFF festgelegt ist, werden diese Fehler und Warnungen nicht ausgelöst.When SET ANSI_WARNINGS is OFF, these errors and warnings are not raised. Der Standardwert in der model-Datenbank für SET ANSI_WARNINGS ist OFF.The default value in the model database for SET ANSI_WARNINGS is OFF. Wird kein Wert angegeben, gilt die Einstellung von ANSI_WARNINGS.If not specified, the setting of ANSI_WARNINGS applies. Wird SET ANSI_WARNINGS auf OFF festgelegt, verwendet SQL ServerSQL Server den Wert der is_ansi_warnings_on-Spalte in der sys.databases-Katalogsicht.If SET ANSI_WARNINGS is OFF, SQL ServerSQL Server uses the value of the is_ansi_warnings_on column in the sys.databases catalog view.

Wichtig

ANSI_WARNINGS sollte zum Ausführen von verteilten Abfragen auf ON festgelegt sein.ANSI_WARNINGS should be set to ON for executing distributed queries.

Clients wie der SQL ServerSQL Server Native Client-ODBC-Treiber, der SQL ServerSQL Server Native Client-OLE DB-Anbieter für SQL ServerSQL Server und der Microsoft JDBC-Treiber für SQL ServerSQL Server legen automatisch ANSI_WARNINGS mit einem Verbindungsflag auf EIN fest.Clients, such as the SQL ServerSQL Server Native Client ODBC driver, the SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL Server, and the Microsoft JDBC Driver for SQL ServerSQL Server automatically set ANSI_WARNINGS to ON with a connection flag. Diese Einstellung kann in ODBC-Datenquellen und ODBC-Verbindungsattributen konfiguriert werden, die in der Anwendung festgelegt werden, bevor die Verbindung hergestellt wird.This can be configured in ODBC data sources, in ODBC connection attributes, set in the application before connecting. Der Standardwert für SET ANSI_WARNINGS für Verbindungen von DB-Library-Anwendungen ist OFF.The default for SET ANSI_WARNINGS is OFF for connections from DB-Library applications. Weitere Informationen finden Sie unter LOGIN7 in den TDS-Protokollspezifikationen (Tabular Data Stream).For additional information, see LOGIN7 in the Tabular Data Stream (TDS) protocol specifications.

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

Die Einstellung von ANSI_WARNINGS wird zur Ausführungs- bzw. Laufzeit und nicht zur Analysezeit definiert.The setting of ANSI_WARNINGS is defined at execute or run time and not at parse time.

Auch wenn SET ARITHABORT oder SET ARITHIGNORE auf OFF und SET ANSI_WARNINGS auf ON festgelegt sind, gibt SQL ServerSQL Server eine Fehlermeldung zurück, wenn ein Fehler aufgrund einer Division durch Null oder ein Überlauffehler auftritt.If either SET ARITHABORT or SET ARITHIGNORE is OFF and SET ANSI_WARNINGS is ON, SQL ServerSQL Server still returns an error message when encountering divide-by-zero or overflow errors.

Um die aktuelle Einstellung anzuzeigen, führen Sie die folgende Abfrage aus.To view the current setting for this setting, run the following query.

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

BerechtigungenPermissions

Erfordert die Mitgliedschaft in der public -Rolle.Requires membership in the public role.

BeispieleExamples

Im folgenden Beispiel werden die drei zuvor beschriebenen Situationen gezeigt, wobei SET ANSI_WARNINGS von ON auf OFF wechselt.The following example demonstrates the three situations that are previously mentioned, with the SET ANSI_WARNINGS to ON and OFF.

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  

Legen Sie ANSI_WARNINGS jetzt auf ON fest, und führen Sie einen Test durch.Now set ANSI_WARNINGS to ON and test.

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  

Legen Sie ANSI_WARNINGS jetzt auf OFF fest, und führen Sie einen Test durch.Now set ANSI_WARNINGS to OFF and test.

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;  

Weitere InformationenSee Also

INSERT (Transact-SQL) INSERT (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
SET-Anweisungen (Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL) SET ANSI_DEFAULTS (Transact-SQL)
SESSIONPROPERTY (Transact-SQL)SESSIONPROPERTY (Transact-SQL)