【问题标题】:Update Zero to One and One to Zero in SQL Server在 SQL Server 中更新零到一和一到零
【发布时间】:2018-04-30 21:14:48
【问题描述】:

我有一个带有标志 0 和 1 的表。

请告诉我如何更新零到一和一到零

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

这个查询对我不起作用。

【问题讨论】:

    标签: sql sql-server database performance sql-server-2008


    【解决方案1】:

    正如您所见,有很多方法可以执行该任务,但在这种情况下,我更喜欢@Abdul Rasheed。 我们也可以在SQLSERVER2012 or above中使用IIF下面的逻辑函数。

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

    【讨论】:

      【解决方案2】:

      您还应该始终在更新操作中考虑 NULL 值,并且必须明确过滤掉它们

      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
      

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

      【讨论】:

        【解决方案3】:

        就这个:

        UPDATE zerone
        SET number = CASE WHEN number = 1 THEN 0 ELSE 1 END;
        

        【讨论】:

          【解决方案4】:

          使用以下查询将0 更新为1 和1 更新为0

          update zerone set number= 1-number
          

          【讨论】:

            猜你喜欢
            • 2018-08-30
            • 2012-05-07
            • 1970-01-01
            • 2011-11-30
            • 2012-06-26
            • 1970-01-01
            • 2019-06-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多