尝试更新SQL中的列时,“无法将值NULL插入列”

尝试更新SQL中的列时,“无法将值NULL插入列”,sql,notnull,Sql,Notnull,我正在尝试使用下面的查询更新非空列的值 update Bom set CountryCode= case when CurrencyId='CHF' then 'CH' when CurrencyId='NZD' then 'NZ' when CurrencyId='KRW' then 'KR' when CurrencyId='HKD' then 'HK' when CurrencyId='MXN' then 'MX' when CurrencyId='USDe' then 'DE' wh

我正在尝试使用下面的查询更新非空列的值

update Bom set CountryCode=
case
when CurrencyId='CHF' then 'CH' 
when CurrencyId='NZD' then 'NZ'
when CurrencyId='KRW' then 'KR'
when CurrencyId='HKD' then 'HK'
when CurrencyId='MXN' then 'MX' 
when CurrencyId='USDe' then 'DE'
when CurrencyId='JPY' then 'JP'
when CurrencyId='EUR' then 'DE'
when CurrencyId='DKK' then 'DK' 
when CurrencyId='GBP' then 'GB'
when CurrencyId='AUD' then 'AU'
when CurrencyId='RMB' then 'CN'
when CurrencyId='USDu' then 'US' 
when CurrencyId='NOK' then 'NO'
when CurrencyId='CAD' then 'CA'
when CurrencyId='USDm' then 'MX'
when CurrencyId='SEK' then 'SE'
when CurrencyId='SGD' then 'SG'
when CurrencyId='TWD' then 'TW'
when CurrencyId='ZAR' then 'ZA'
end
但出于某种原因,我在说

无法将值NULL插入到 “CountryCode”列,表 “Mouser_BOM.dbo.BOM”;列不存在 允许空值。更新失败

我没有插入任何空值,但仍然得到这个错误。有人能帮我解释一下为什么我会这样做。

在你的陈述末尾添加一个ELSE子句,以抓住你的条件都不匹配的情况。这应该可以消除错误。比如:

...
  when CurrencyId='SGD' then 'SG'
  when CurrencyId='TWD' then 'TW'
  when CurrencyId='ZAR' then 'ZA'
  else '??'
end

这是一个相当糟糕的案例陈述。我猜你和你的案子不匹配

看看它,以不同的方式实现同样的事情不是更容易吗

除了少数例外,几乎所有的更新都可以通过子字符串完成

e、 g

然后手动执行异常


虽然你已经找到了这个具体问题的答案,这很酷,但我的建议是找出模式,不要让生活对自己太艰难。

首先,你的案例陈述可以简化

 CASE CurrencyId 
 WHEN 'CHF' THEN 'CH'
 WHEN 'NZD' THEN 'NZ' 
 WHEN 'KRW' THEN 'KR' 
 END
其次,必须有一个条件与它们中的任何一个都不匹配。执行选择以查找它:

        SELECT *
        FROM Bom
        WHERE case CurrencyId 
        when 'CHF' then 'CH' 
        when 'NZD' then 'NZ' 
        when 'KRW' then 'KR' 
        ...
        end IS NULL

你要用哪种货币?您是否考虑过在case语句中添加一个默认值,以防您得到一个无法识别的CurrencyId?我的想法很准确-也检查您的起始数据,但您应该添加某种默认值。@user648610:请养成接受提供的最佳答案的习惯,即解决您的问题的答案。这是在StackOverflow上做的正确和礼貌的事情,并激励其他人继续帮助那些寻找答案的人。Re:marc_s-它让世界变得更快乐,为每个人微笑!:这看起来好多了。谢谢
        SELECT *
        FROM Bom
        WHERE case CurrencyId 
        when 'CHF' then 'CH' 
        when 'NZD' then 'NZ' 
        when 'KRW' then 'KR' 
        ...
        end IS NULL