尝试更新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