【问题标题】: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