您的位置:首页 > 其它

是否可以屏蔽‘警告: 聚合或其它 SET 操作消除了空值。’一类警告信息?

2010-04-12 14:48 260 查看
  由于不希望向执行存储过程的delphi程序返回警告信息,所以请教高手:是否有可能在存储过程中进行设置,让严重级别在11以下的警告信息不报告。当然修改存储过程,使之不出现‘警告: 聚合或其它 SET 操作消除了空值。’信息应该是最佳方法,但这不是我要的答案。
网友回复:有null时 isnull(,'')--转换一下
网友回复:isnull(null,'')--空字符
网友回复:应该可以,使用某个开关屏蔽信息.

我找找先.
网友回复:在开发中常碰到,在存储过程里转换一下空值为空字符
网友回复:楼主说的应该是结果集的列有空值,这个与设置无关
网友回复: set ansi_warnings off

===================================================

网友回复:

SET ANSI_WARNINGS

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

语法
SET ANSI_WARNINGS { ON ¦ OFF }

注释
SET ANSI_WARNINGS 影响以下情况:

当设置为 ON 时,假如聚合函数(如 SUM、AVG、MAX、MIN、STDEV、STDEVP、VAR、VARP 或 COUNT)中出现空值,将生成警告信息。当设置为 OFF 时,不发出警告。

当设置为 ON 时,被零除错误和算术溢出错误将导致回滚语句并生成错误信息。当设置为 OFF 时,被零除错误和算术溢出错误将导致返回空值。假如在 character、Unicode 或 binary 列上尝试执行 INSERT 或 UPDATE 操作,而这些列中的新值长度超出最大列大小,则被零除错误和算术溢出错误将导致返回空值。假如 SET ANSI_WARNINGS 为 ON,则按 SQL-92 标准的指定将取消 INSERT 或 UPDATE。将忽略字符列的尾随空格,忽略二进制列的尾随零。当设置为 OFF 时,数据将剪裁为列的大小,并且语句执行成功。

说明 在 binary 或 varbinary 数据转换中发生截断时,不管 SET 选项的设置是什么,都不发出警告或错误信息。

可以使用 sp_configure 的 user 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_dboption 的 ANSI 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐