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

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Especifica el comportamiento estándar de ISO para diversas condiciones de error.Specifies ISO standard behavior for several error conditions.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

SET ANSI_WARNINGS ON

NotasRemarks

SET ANSI_WARNINGS afecta a las condiciones siguientes:SET ANSI_WARNINGS affects the following conditions:

  • Si es ON y aparecen valores NULL en funciones de agregado, como SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP o COUNT, se genera un mensaje de advertencia.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. Si es OFF, no se genera ninguna advertencia.When set to OFF, no warning is issued.

  • Si es ON, los errores de división por cero y desbordamiento aritmético hacen que la instrucción se revierta y que se genere un mensaje de error.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. Si es OFF, los errores de división por cero y de desbordamiento aritmético hacen que se devuelvan valores NULL.When set to OFF, the divide-by-zero and arithmetic overflow errors cause null values to be returned. El comportamiento por el que un error de división por cero o desbordamiento aritmético hace que se devuelvan valores NULL tiene lugar cuando se intenta ejecutar una operación INSERT o UPDATE en una columna de tipo character, Unicode o binary, en la que la longitud del nuevo valor excede el tamaño máximo de la columna.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. Si SET ANSI_WARNINGS es ON, se cancelan INSERT o UPDATE, tal y como especifica el estándar ISO.If SET ANSI_WARNINGS is ON, the INSERT or UPDATE is canceled as specified by the ISO standard. No se tienen en cuenta los espacios en blanco a la derecha en las columnas de carácter ni los valores NULL a la derecha en las columnas binarias.Trailing blanks are ignored for character columns and trailing nulls are ignored for binary columns. Cuando es OFF, los datos se truncan para ajustarlos al tamaño de la columna y la instrucción se ejecuta correctamente.When OFF, data is truncated to the size of the column and the statement succeeds.

Nota

Cuando se produce un truncamiento en alguna conversión desde o hacia datos binary o varbinary, no se emite ningún error ni advertencia, independientemente de las opciones SET.When truncation occurs in any conversion to or from binary or varbinary data, no warning or error is issued, regardless of SET options.

Nota

No se respeta ANSI_WARNINGS al pasar parámetros de un procedimiento almacenado, una función definida por el usuario o al declarar y establecer variables en una instrucción de lote.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. Por ejemplo, si una variable se define como char(3) y después se establece en un valor de más de tres caracteres, los datos se truncan hasta el tamaño definido y la instrucción INSERT o UPDATE se ejecuta correctamente.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.

Se puede utilizar la opción user options de sp_configure para establecer el valor predeterminado de ANSI_WARNINGS en todas las conexiones al servidor.You can use the user options option of sp_configure to set the default setting for ANSI_WARNINGS for all connections to the server. Para obtener más información, vea sp_configure (Transact-SQL).For more information, see sp_configure (Transact-SQL).

ANSI_WARNINGS debe ser ON al crear o manipular índices en columnas calculadas o vistas indexadas.ANSI_WARNINGS must be ON when you are creating or manipulating indexes on computed columns or indexed views. Si SET ANSI_WARNINGS es OFF, las instrucciones CREATE, UPDATE, INSERT y DELETE provocarán errores en tablas con índices en columnas calculadas y vistas indizadas.If SET ANSI_WARNINGS is OFF, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail. Para más información sobre las configuraciones de las opciones SET necesarias con vistas indizadas e índices en columnas calculadas, vea el apartado "Consideraciones al utilizar las instrucciones SET" en Instrucciones SET (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 incluye la opción de base de datos ANSI_WARNINGS.includes the ANSI_WARNINGS database option. Es equivalente a SET ANSI_WARNINGS.This is equivalent to SET ANSI_WARNINGS. Cuando SET ANSI_WARNINGS es ON, se producen errores o advertencias si hay división por cero, cadenas demasiado largas para la columna correspondiente de la base de datos y otras situaciones similares.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. Cuando SET ANSI_WARNINGS es OFF, no se generan tales errores y advertencias.When SET ANSI_WARNINGS is OFF, these errors and warnings are not raised. La opción predeterminada en la base de datos model para SET ANSI_WARNINGS es OFF.The default value in the model database for SET ANSI_WARNINGS is OFF. Si no se especifica, se aplica la opción de ANSI_WARNINGS.If not specified, the setting of ANSI_WARNINGS applies. Si SET ANSI_WARNINGS es OFF, SQL ServerSQL Server usa el valor de la columna is_ansi_warnings_on de la vista de catálogo sys.databases.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.

Importante

ANSI_WARNINGS debe establecerse en ON para ejecutar consultas distribuidas.ANSI_WARNINGS should be set to ON for executing distributed queries.

El controlador ODBC de SQL ServerSQL Server Native Client y el proveedor OLE DB de SQL ServerSQL Server Native Client para SQL ServerSQL Server establecen automáticamente ANSI_WARNINGS en ON al conectarse.The SQL ServerSQL Server Native Client ODBC driver and SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL Server automatically set ANSI_WARNINGS to ON when connecting. Esta opción se puede configurar en los orígenes de datos ODBC, en los atributos de conexión de ODBC, establecidos en la aplicación antes de conectar.This can be configured in ODBC data sources, in ODBC connection attributes, set in the application before connecting. El valor predeterminado de SET ANSI_WARNINGS es OFF en las conexiones desde aplicaciones DB-Library.The default for SET ANSI_WARNINGS is OFF for connections from DB-Library applications.

Cuando ANSI_DEFAULTS es ON, se habilita ANSI_WARNINGS.When ANSI_DEFAULTS is ON, ANSI_WARNINGS is enabled.

El valor de ANSI_WARNINGS se define en tiempo de ejecución, no en tiempo de análisis.The setting of ANSI_WARNINGS is defined at execute or run time and not at parse time.

Si SET ARITHABORT o SET ARITHIGNORE es OFF y SET ANSI_WARNINGS es ON, SQL ServerSQL Server devolverá un mensaje de error cuando haya errores de división por cero o desbordamiento.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.

Para ver la configuración actual de este valor, ejecute la consulta siguiente.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;  

PermisosPermissions

Debe pertenecer al rol public .Requires membership in the public role.

EjemplosExamples

En este ejemplo se muestran las tres situaciones mencionadas anteriormente con SET ANSI_WARNINGS en ON y en OFF.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  

Ahora establezca ANSI_WARNINGS en ON y pruebe.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  

Ahora establezca ANSI_WARNINGS en OFF y pruebe.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;  

Consulte tambiénSee Also

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