Transact-SQL 参考

SET ANSI_WARNINGS

指定几种错误情况下的 SQL-92 标准行为。

语法

SET ANSI_WARNINGS { ON | OFF }

注释

SET ANSI_WARNINGS 影响以下情况:

可以使用 sp_configureuser options 选项,为与服务器的所有连接设置 ANSI_WARNINGS 的默认设置。有关更多信息,请参见 sp_configure设置配置选项

创建或操作索引视图或计算列上的索引时,SET ANSI_WARNINGS 必须为 ON。如果 SET ANSI_WARNINGS 为 OFF,计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见 SET 中的"使用 SET 语句时的注意事项"。

Microsoft® SQL Server™ 包含 ANSI warnings 数据库选项,该选项等同于 SET ANSI_WARNINGS。当 SET ANSI_WARNINGS 为 ON 时,如发生被零除、字符串超出数据库列及其它类似错误,将产生错误信息或警告。当 SET ANSI_WARNINGS 为 OFF 时,不产生这些错误和警告。model 数据库中的 SET ANSI_WARNINGS 默认值是 OFF。如果未指定,则应用 ANSI warnings 设置。如果 SET ANSI_WARNINGS 为 OFF,SQL Server 将使用 sp_dboptionANSI warnings 设置。有关更多信息,请参见 sp_dboption设置数据库选项

在执行分布式查询时应将 ANSI_WARNINGS 设置为 ON。

SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序在连接时自动将 ANSI_WARNINGS 设置为 ON。这可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性(它们在连接前在应用程序中设置)中进行配置。对来自 DB-Library 应用程序的连接,SET ANSI_WARNINGS 默认为 OFF。

当 SET ANSI_DEFAULTS 为 ON 时,将启用 SET ANSI_WARNINGS。

SET ANSI_WARNINGS 的设置是在执行或运行时设置,而不是在分析时设置。

如果 SET ARITHABORT 或 SET ARITHIGNORE 为 OFF,并且 SET ANSI_WARNINGS 为 ON,则当遇到被零除或溢出错误时,SQL Server 仍返回错误信息。

权限

SET ANSI_WARNINGS 权限默认授予所有用户。

示例

下例演示 SET ANSI_WARNINGS 为 ON 和 OFF 时的上述三种情况。

USE pubs
GO
CREATE TABLE T1 ( a int, b int NULL, c varchar(20) ) 
GO
SET NOCOUNT ON
GO
INSERT INTO T1 VALUES (1, NULL, '')
INSERT INTO T1 VALUES (1, 0, '')
INSERT INTO T1 VALUES (2, 1, '')
INSERT INTO T1 VALUES (2, 2, '')
GO
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 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
  
PRINT 'Testing Divide by zero'
GO
SELECT a/b FROM T1
GO
DROP TABLE T1
GO

请参见

INSERT

SELECT

SET

SET ANSI_DEFAULTS