[英]“Cannot insert the value NULL into column” when trying to update a column in SQL
我正在尝试使用以下查询更新不是 null 的列的值
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”中; 列不允许空值。 更新失败。
我没有插入任何 null 值,但仍然出现此错误。 有人可以帮助我为什么得到这个。
将ELSE子句添加到语句的末尾以捕获您的条件都不匹配的情况。 那应该摆脱错误。 所以像:
...
when CurrencyId='SGD' then 'SG'
when CurrencyId='TWD' then 'TW'
when CurrencyId='ZAR' then 'ZA'
else '??'
end
这是一个相当讨厌的案例陈述。 我的猜测是你不匹配你的一个案例。
看着它,用不同的方式实现同样的事情不是更容易吗?
除了少数例外,几乎所有更新都可以使用 substring 完成。
例如
UPDATE
BOM
SET
CountryCode = SUBSTRING(CountryCode,1,2)
WHERE
CountryCode IN
(
'CHF',
'HKD'
-- the rest of these go here
)
然后手动执行异常。
虽然你对这个特定问题有答案很酷,但我的建议是找出模式,不要让自己的生活太难。
首先,您的案例陈述可以简化。
CASE CurrencyId
WHEN 'CHF' THEN 'CH'
WHEN 'NZD' THEN 'NZ'
WHEN 'KRW' THEN 'KR'
END
其次,必须有一个条件与其中任何一个都不匹配。 做一个 select 找到它:
SELECT *
FROM Bom
WHERE case CurrencyId
when 'CHF' then 'CH'
when 'NZD' then 'NZ'
when 'KRW' then 'KR'
...
end IS NULL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.