繁体   English   中英

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

[英]“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM