条件更新语句在SQL Server 2012上返回错误结果

我正在尝试更新SQL Server 2012 Management Studio中的表。与尝试编写四个单独的Update语句不同,我试图查看是否有可能编写一个查询,该查询将根据列的值存储四种以不同的方式更新一列的同一张表。 / p>

假设我有一个名为table_food的表,具有以下结构

|Customer|Preference|
+--------+----------+
|John    |McDs      |
|Div     |KFC       |
|Paul    |KFC       |
|Pablo   |Wasabi    |

我的想法是将Preference列更新为新值,而我编写的查询是:

UPDATE table_food
SET Preference = 
    CASE WHEN Preference = 'McDs' Then 'Burger'
         WHEN Preference = 'KFC' Then 'KingsMeal'
    END

现在,在我的实际表上,只有8个不同的选项可供选择,而我只需要两个更新4。(在上面的示例中,我刚刚做了两个,但是我有四个when语句……所以另外两个行)

当我运行查询时,它显示受影响的行更多,并检查结果后,我注意到现在只有一个选项显示为“ Burger”,计数为8,所有其他行均设置为null 。有什么我想念的吗?

smj1588 回答:条件更新语句在SQL Server 2012上返回错误结果

该查询将更新表上的每一行,因为它缺少WHERE子句。如果WHEN条件都不为真,则CASE WHEN表达式将返回NULL。您可能需要类似以下查询:

UPDATE table_food
SET Preference = 
    CASE WHEN Preference = 'McDs' Then 'Burger'
         WHEN Preference = 'KFC' Then 'KingsMeal'
    END
WHERE Preference in ('McDs','KFC')
,

在您的else语句上添加case

UPDATE table_food
SET Preference = 
    CASE WHEN Preference = 'McDs' Then 'Burger'
         WHEN Preference = 'KFC' Then 'KingsMeal'
    ELSE Preference 
    END

或者如果您只想更新受影响的行,请执行update from

UPDATE table_food
SET Preference = t2.newPreference
FROM
    (SELECT CASE WHEN Preference = 'McDs' Then 'Burger'
                WHEN Preference = 'KFC' Then 'KingsMeal'
                WHEN Preference = 'KFC1' Then 'KingsMeal1'
                WHEN Preference = 'KFC'2 Then 'KingsMeal2'
            END as newPreference,Preference
    FROM table_food) t2
WHERE t2.Preference = table_food.Preference and coalesce(t2.newPreference,'') != ''
本文链接:https://www.f2er.com/3155814.html

大家都在问