更新 - 案例陈述 - 结果太多了

时间:2013-11-29 02:43:52

标签: sql sql-server tsql

我正在尝试使用case语句在表上执行非常简单的数据插入,请参阅下文:

begin tran
  update tblworkitems
  set fkidsupplier = (
    case
    when idworkitem = 214159 then 50290
    when idworkitem = 270370 then 50367
    when idworkitem = 225533 then 50453
    ...
    end )
where 
fkidtemplateitem = 654 and
fkidsupplier is null

我有大约85个显式值。 idWorkItem是主键,fkidSupplier是外键(匈牙利表示法多吗?)。问题是~350行正在返回。我之前用过类似的事情已经完成了一百万次并且从来没有这样做过。

快速检查确认没有重复(架构应该强制执行此操作):

select idworkitem 
from tblworkitems 
where fkidtemplateitem = 654
group by idworkitem having count(*) > 1

是的,我理解这些主键的WHERE子句无效。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用您拥有的结构,您仍然可以更新符合WHERE子句中条件的所有记录。对于CASE中未指定的内容,只需设置NULL

您应该做的是在idworkitem子句中指定要更新的WHERE的所有记录。