T-SQL中的ISNULL和IS NULL

T-SQL中,有时判断一个变量是否为NULL时,有人可能会用到函数ISNULL,如: 

DECLARE   @VAR1   VARCHAR ( 20 )
DECLARE   @VAR2   INT
IF   ISNULL ( @VAR1 '' =   ''   PRINT   ' @VAR1 is null. '
IF   ISNULL ( @VAR2 - 1 =   - 1   PRINT   ' @VAR2 is null. '

这种用法其实是有问题的,再看: 

DECLARE   @VAR1   VARCHAR ( 20 )
DECLARE   @VAR2   INT
SET   @VAR1   =   ''
SET   @VAR2   =   - 1
IF   ISNULL ( @VAR1 '' =   ''   PRINT   ' @VAR1 is null. '
IF   ISNULL ( @VAR2 - 1 =   - 1   PRINT   ' @VAR2 is null. '

很显然,@VAR1和@VAR2均已赋值且不为NULL。

再看更特殊的情况: 

DECLARE   @VAR3   BIT
PRINT   ISNULL ( @VAR3 - 1 )

打印出来的值是1,而不是-1,这是因为:@VAR3的类型是BIT,其可能值只有三个:0、1或NULL,如果给其赋0和NULL之外的值(此处是-1),均被认为是1。

用ISNULL函数判断变量是否为NULL,在特定上下文的业务逻辑中有可能是正常运行的,如上述@VAR1永远不会为'',@VAR2永远不会为-1的情况;还有一种情况,以@VAR1为例,如果开发人员确实希望IF分支中的语句不仅在@VAR1是NULL的时候执行,而且当@VAR1的值是一个空字符串('')时也执行。

变量是否为NULL的判断应该使用IS NULL: 

DECLARE   @VAR1   VARCHAR ( 20 )
DECLARE   @VAR2   INT
DECLARE   @VAR3   BIT
SET   @VAR1   =   ''
SET   @VAR2   =   - 1
IF   @VAR1   IS   NULL   PRINT   ' @VAR1 is null. '   ELSE   PRINT   ' @VAR1 is not null. '
IF   @VAR2   IS   NULL   PRINT   ' @VAR1 is null. '   ELSE   PRINT   ' @VAR2 is not null. '
IF   @VAR3   IS   NULL   PRINT   ' @VAR1 is null. '   ELSE   PRINT   ' @VAR3 is not null. '

IS NULL经常用于组成一个逻辑表达式出现在单个T-SQL语句的WHERE子句中,有些人在写存储过程时遇到控制流语句却不敢用了,而改用ISNULL函数,记之。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值