码迷,mamicode.com
首页 > 数据库 > 详细

[转] T-SQL中的ISNULL和IS NULL

时间:2014-11-17 21:04:33      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   os   使用   sp   div   on   

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

1 DECLARE @VAR1 VARCHAR(20)
2 DECLARE @VAR2 INT
3 IF ISNULL(@VAR1, ‘‘) = ‘‘ PRINT @VAR1 is null.
4 IF ISNULL(@VAR2, -1) = -1 PRINT @VAR2 is null.

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

1 DECLARE @VAR1 VARCHAR(20)
2 DECLARE @VAR2 INT
3 SET @VAR1 = ‘‘
4 SET @VAR2 = -1
5 IF ISNULL(@VAR1, ‘‘) = ‘‘ PRINT @VAR1 is null.
6 IF ISNULL(@VAR2, -1) = -1 PRINT @VAR2 is null.

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

再看更特殊的情况: 

1 DECLARE @VAR3 BIT
2 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: 

1 DECLARE @VAR1 VARCHAR(20)
2 DECLARE @VAR2 INT
3 DECLARE @VAR3 BIT
4 SET @VAR1 = ‘‘
5 SET @VAR2 = -1
6 IF @VAR1 IS NULL PRINT @VAR1 is null. ELSE PRINT @VAR1 is not null.
7 IF @VAR2 IS NULL PRINT @VAR1 is null. ELSE PRINT @VAR2 is not null.
8 IF @VAR3 IS NULL PRINT @VAR1 is null. ELSE PRINT @VAR3 is not null.

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

[转] T-SQL中的ISNULL和IS NULL

标签:style   blog   color   ar   os   使用   sp   div   on   

原文地址:http://www.cnblogs.com/XingchenStudio/p/4104360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!