【问题标题】:How to compare Null values from the database column [duplicate]如何比较数据库列中的 Null 值[重复]
【发布时间】:2013-11-13 10:18:44
【问题描述】:

我的表中有记录,其中 Name 列具有 Null 值.. 我想使用以下查询更新该记录.. 我的sql查询是:

set @Name=NUll;

update emp set name="gaurav" where name=@Name

当我运行这个查询时..它不会更新记录..它不会将值 Null 与列值进行比较

如何做到这一点?

【问题讨论】:

  • 不,我不能使用这个..因为@Name 有某个时间值,如果值包含则更新该值的基础..它是 Null 或者它有值..
  • 试用update emp set name="gaurav" where isnull(name,'')=''
  • @PavanKumar 更新空字符串的名称。

标签: sql-server null


【解决方案1】:
SET @Name = NULL;

UPDATE emp
SET name="gaurav"
WHERE    (@Name IS NULL     AND name IS NULL)
      OR (@Name IS NOT NULL AND name = @Name)

【讨论】:

  • OR (@Name IS NOT NULL AND name = @Name)可以简化为OR (name = @Name)
【解决方案2】:

你也可以使用ISNULL()以下条件

SET @Name = NULL;

UPDATE emp SET name='gaurav' WHERE ISNULL(@Name,'XXXXXXX')=ISNULL(Name,'XXXXXXX'); 

其中'XXXXXXX'是EMP表中不存在的唯一字符串常量;

【讨论】:

  • 除了查找不可能出现在数据中的魔术字符串的问题之外,这种方法可以防止使用name 上的索引来定位匹配行的可能性
【解决方案3】:

除了 IS NULL 或 IS NOT NULL 之外,在 SQL 中使用 null 值的测试总是错误的。 您应该在 WHERE 中添加 IS NULL 子句:

WHERE name = @name
**OR (name IS NULL and @name IS NULL)**

【讨论】:

    【解决方案4】:

    试试这个UPDATE emp SET name = "gaurav" WHERE (@name IS NULL AND name IS NULL)

    【讨论】:

    • OP 正在使用变量。
    • 不,我不能使用它。因为@Name 有某个时间值,如果值包含,则更新该值的基础。它要么是 Null,要么有值。
    • 感谢 MartinSmith @user2003615 的指点,您可以参考 ta.speot.is 的回答。
    【解决方案5】:

    根据我的 SQL 知识,您可以将 NULL 存储在变量中,但不能用于比较

    update emp set name="gaurav" where name is Null
    

    【讨论】:

    • OP 正在使用一个变量。
    • @MartinSmith 你连续否决了所有这些答案??
    • 根据我的 SQL 知识,您可以将 NULL 存储在变量中,但不能用于比较
    • 其实这个参数在存储过程中...
    • @Dhaval - 我对所有 FGITW 的答案投了反对票,这些答案错过了关于变量的要点,并赞成了没有的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多