«Невозможно вставить значение NULL в столбец» при попытке обновить столбец в SQL - PullRequest
0 голосов
/ 06 июля 2011

Я пытаюсь обновить значения столбца, который не является нулевым, используя запрос ниже

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'; столбец не разрешить нули ОБНОВЛЕНИЕ не удается.

Я не вставляю нулевые значения, но все еще получаю эту ошибку. Может кто-нибудь помочь, почему я получаю это.

Ответы [ 3 ]

5 голосов
/ 06 июля 2011

Добавьте предложение ELSE в конец вашего оператора, чтобы выявить случай, когда ни одно из ваших условий не соответствует.Это должно избавиться от ошибки.Так что-то вроде:

...
  when CurrencyId='SGD' then 'SG'
  when CurrencyId='TWD' then 'TW'
  when CurrencyId='ZAR' then 'ZA'
  else '??'
end
2 голосов
/ 06 июля 2011

Это довольно неприятное утверждение.Я предполагаю, что вы не соответствуете одному из ваших дел.

Глядя на это, не проще ли добиться того же самого по-другому?

За некоторыми исключениями,почти все ваши обновления могут быть сделаны с подстрокой.

например,

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

Затем выполните исключения вручную.

Пока круто, что у вас естьЧтобы ответить на эту конкретную проблему, мой совет - определить закономерности и не делать жизнь слишком тяжелой для себя.

0 голосов
/ 06 июля 2011

Во-первых, ваше утверждение case может быть упрощено.

 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
...