代码之家  ›  专栏  ›  技术社区  ›  sampath acharya

在SQL Server中更新0到1和1到0

  •  2
  • sampath acharya  · 技术社区  · 7 年前

    我有一张带有标志0和1的桌子。

    请告诉我如何将0更新为1和1更新为0

    DECLARE @a INT, @b INT
    
    SELECT @a = number
    FROM zerone
    WHERE number = 0
    
    SELECT @b = number
    FROM zerone
    WHERE number = 1
    
    BEGIN
        IF @a = 0
            UPDATE zerone
            SET number = 1
            WHERE @a = 0
        ELSE IF @b = 1
            UPDATE zerone
            SET number = 0
            WHERE @b = 1
    END
    

    这个查询对我不起作用。

    4 回复  |  直到 7 年前
        1
  •  4
  •   Abdul Rasheed    7 年前

    使用以下查询进行更新 0 1 0

    update zerone set number= 1-number
    
        2
  •  1
  •   gotqn user3521065    7 年前

    仅此而已:

    UPDATE zerone
    SET number = CASE WHEN number = 1 THEN 0 ELSE 1 END;
    
        3
  •  0
  •   DhruvJoshi    7 年前

    您还应该在更新操作中始终考虑空值,并且必须显式地将其过滤掉

    UPDATE zerone
    SET number= case 
                  when 1 then 0
                  when 0 then 1
                 end
    WHERE number in (0,1)
    

    此外,由于在select语句中为单个变量分配了一行数据,因此查询将不起作用。

    SELECT @a = number
    FROM zerone
    WHERE number = 0
    

    这不像您期望的那样工作,只会将@赋值为NULL(如果没有行)或0(如果有行)。如果有多行,那么它将有一个值0

        4
  •  0
  •   Shushil Bohara    7 年前

    @Abdul Rasheed . 我们也可以使用下面的 IIF 中的逻辑函数 SQLSERVER2012 or above .

    UPDATE zerone
    SET number = IIF (number = 1, 0, 1)