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

  由于不希望向执行存储过程的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 时的上述三种情况。

ExpandedBlockStart.gif 代码
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  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值