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函数,记之。

posted @   蜡人张  阅读(21172)  评论(5编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示