zoukankan      html  css  js  c++  java
  • 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函数,记之。

  • 相关阅读:
    Spring Boot四:配置文件详解properties
    程序员常去的14个顶级开发社区
    Spring Boot二:创建第一个web工程 hello world
    Java架构工程师知识图
    Java高效开发12个精品库
    华为员工:表面光鲜 工作十年买不起房
    如果你是一个程序员,又要踏足人工智能领域,应该要知道哪些语言
    H5表单提交上传图片
    转:正则表达式
    转载:jsp九大内置对象和四大作用域
  • 原文地址:https://www.cnblogs.com/Fooo/p/2684918.html
Copyright © 2011-2022 走看看