2011-07-06 61 views
0
更新列时

我尝试更新列使用下面“无法插入NULL值插入列”试图在SQL

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';列不会 允许空值。更新失败。

我没有插入任何空值,但仍然出现此错误。有人可以帮助我为什么得到这个。

+2

什么CurrencyId你通过?您是否考虑在您的病例陈述中添加默认值以防万一您无法识别CurrencyId? – Brandon

回答

5

添加一个否则子句到您的语句结尾,以捕捉您的条件都不匹配的情况。这应该摆脱错误。所以像这样:

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

好的,谢谢它工作正常 – user648610

+0

我的想法 - 确认您的起始数据,但您应该添加某种默认情况。 –

+0

@ user648610:请接受**接受**提供的最佳答案,解决您的问题的习惯。在StackOverflow上做这件事是正确而有礼貌的,并且可以激励其他人继续帮助那些寻求答案的人。 [查看常见问题](http://meta.stackexchange.com/questions/5234/accepting-answers-what-is-it-all-about) –

2

那是一个相当讨厌的病例陈述。我的猜测是你不符合你的一个案例。

看着它,用不同的方式实现同​​样的事情更容易吗?

除少数例外,几乎所有的更新都可以使用子字符串完成。

例如

UPDATE 
    BOM 
SET 
    CountryCode = SUBSTRING(CountryCode,1,2) 
WHERE 
    CountryCode IN 
(
    'CHF', 
    'HKD' 
    -- the rest of these go here 
) 

然后手动执行例外。

虽然你对这个特定问题的答案很酷,但我的建议是发现这些模式,而不是让自己过得太难。

+0

感谢您的建议 – user648610

0

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

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 
+0

这看起来好多了。谢谢 – user648610