Ошибка преобразования при преобразовании значения nvarchar 'value, value' в int - PullRequest
0 голосов
/ 30 июня 2018
update Quotation_T  
set DOID = CASE 
              WHEN DOID = '' THEN 19
              WHEN DOID LIKE '%10%' THEN DOID       
              WHEN DOID != '' THEN (DOID + ',' + '20')
           END        

Я получаю ошибку

Ошибка преобразования при преобразовании значения nvarchar '19, 20 'в тип данных int

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Я бы настоятельно рекомендовал написать код:

update Quotation_T  
    set DOID = (case when doid = '' then '19'
                     else (DOID + ',20')
                end)
    where doid not like '%10%' or doid is null;

Это даже не пытается обновить строки, которые не нужно обновлять.

Я бы также сделал замечание, что вы, похоже, храните строки, разделенные запятыми, в одном столбце. Если это так, я настоятельно призываю вас пересмотреть свою модель данных и использовать вместо нее отдельную таблицу соединений. SQL на самом деле не предназначен для хранения списков вещей в строках. Этот (и другие заданные вами вопросы) показывают, что смешивание типов и хранение нескольких значений в столбце просто создают ненужные проблемы.

0 голосов
/ 30 июня 2018

Скорее всего, DOID - это столбец nvarchar(n) - тогда это очевидно: ваше CASE выражение должно возвращать одинаковый тип данных для всех путей, и поскольку первое предложение WHEN возвращает INT, все другие пути также должны возвращать INT, и если они этого не делают, SQL Server преобразует свои возвращаемые значения в INT, что вызывает исключение.

Также: поскольку вы обновляете столбец DOID, вы должны использовать его собственный тип данных - поэтому ваше первое предложение WHEN должно вернуть a nvarchar(n) вместо INT.

Попробуйте вместо этого код:

UPDATE Quotation_T  
SET DOID = CASE 
              WHEN DOID = '' THEN CAST(19 AS NVARCHAR(20))
              WHEN DOID LIKE '%10%' THEN DOID       
              WHEN DOID != '' THEN (DOID + N',20')
           END    

Теперь все предложения WHEN правильно возвращают тип данных, который ожидает DOID, обновляемый, и не требуется никаких неявных преобразований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...