代码之家  ›  专栏  ›  技术社区  ›  DForck42

奇怪的更新行为

  •  0
  • DForck42  · 技术社区  · 15 年前

    在我的数据仓库存储过程的一部分中,我有一个将旧项目数据与新项目数据(旧数据在表中,新数据在临时表中)进行比较并更新旧数据的过程。

    多个update语句之一:

    update cube.Projects
    set prServiceLine=a.ServiceLine
    from @projects1 a
        inner join cube.Projects
            on a.WPROJ_ID=cube.Projects.pk_prID
    where prServiceLine<>a.ServiceLine
    
    3 回复  |  直到 12 年前
        1
  •  1
  •   KM.    15 年前
    where prServiceLine<>a.ServiceLine
    

    测试这一点:

    declare @x int, @y int
    if @x<>@y print 'works'
    if @x=@y print 'works!'
    set @x=1
    if @x<>@y print 'not yet'
    if @x=@y print 'not yet!'
    set @y=2
    if @x<>@y print 'maybe'
    if @x=@y print 'maybe!'
    

    输出:

    maybe
    

    你永远不会看到“作品”,“作品!”,““还没有”,或者“还没有!”获取输出。只有可能(“可能!”,如果两者相等的话)。

    不能使用!=,=,测试空值,或<>,如果要测试的值之一可以为NULL,则需要在WHERE中使用ISNULL()、COALESCE、IS NOT NULL或IS NULL。

        2
  •  1
  •   Cybergibbons    15 年前

    维基百科关于 SQL Nulls 实际上是非常好的-它解释了行为通常不是您期望的,在许多情况下返回“未知”而不是真或假。

    如果你引入空值,会有很多陷阱。。。

        3
  •  0
  •   Mitch Wheat    15 年前