powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при выполнении запроса
25 сообщений из 36, страница 1 из 2
Ошибка при выполнении запроса
    #39707785
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Получается у меня ошибка в запросе, просто уже не могу понять в чем дело/, казалось бы всё очень просто: есть у меня две таблицы и нужно мигрировать данные из одного поля (символьный тип) в другое (numeric(10,3)), причем буквально перед выполнением миграции изменил тип получателя с int на numeric(10,3), миграцию делается по 3 кодам

Код: sql
1.
2.
3.
update n
set n.pw = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN 0 ELSE RTRIM(replace(r.field11,',','.')) END
FROM [DNRR].[dbo].[res1] r inner join [DNRR_test2].[dbo].[rich_] n on n.field4 = r.ndoc and n.field5 = r.ddoc and n.resid = r.resid



так вот при выполнении запроса ошибка
Сообщение 245, уровень 16, состояние 1, строка 1
Conversion failed when converting the varchar value '39.3' to data type int.

такое впечатление, что система запомнила, что ранее та был тип int
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707788
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,

Злопамятная какая...
int старше varchar по этому прифодит к нему.
что вы этим хотите получить не понятно RTRIM(replace(r.field11,',','.'))
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707794
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так понимаю вам это надо
THEN '0'
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707797
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
field11 - char поэтому RTRIM - в этой строке может быть что угодно, только вашего ответа не понял, что значит int старше?
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707798
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKя так понимаю вам это надо
THEN '0'

подозреваю, что n.pw имеет тип numeric(10,3)
и поэтому скорее надо RTRIM(replace(r.field11,',','.')) приводить к numeric
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707801
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да если не распознано, значит 0 в противном случае число
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707802
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПосетительTaPaKя так понимаю вам это надо
THEN '0'

подозреваю, что n.pw имеет тип numeric(10,3)
и поэтому скорее надо RTRIM(replace(r.field11,',','.')) приводить к numeric
та может, во всём тексте нет названия колонки которую он менял :) Но при этом даже оставив '0' всё равно будет пытаться скрафтить numeric.
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707803
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968да если не распознано, значит 0 в противном случае число
новых символов не заметили?
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707804
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да и к numeric приводил тоже - не помогло
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707805
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,
Вы хотите сказать, что у Вас столбец pw был формата int и строка "39.3" в него не входила, а теперь Вы сделали его в формате numeric(10,3) и ожидаете, что явное присванивание текста "39.3", который получается из текста "39,3" - пройдет успешно??

set n.pw = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN 0 ELSE RTRIM(replace(r.field11,',','.')) END

Сделайте так. Отделите рубли от копеек, 39*100+3, получите явно int, а затем записываете

set n.pw = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN convert(numeric(10,3),0)
ELSE convert(numeric(10,3), convert(double, convert(int,'рубли из поля r.field11')*100+convert(int,'копейки из поля r.field11'))/convert(double,100)) END

Как отделить рубли от копеек - надеюсь, понятно, берете запятую и все, что слева - рубли, все, что справа - копейки, если одна цифра, умножаете на 10, то есть 39,3 - это не 3 копейки, а 30 копеек.

Понятно?
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707809
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

Ржал аки конь, таким только детей пугать
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707810
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPpatrick1968,
Вы хотите сказать, что у Вас столбец pw был формата int и строка "39.3" в него не входила, а теперь Вы сделали его в формате numeric(10,3) и ожидаете, что явное присванивание текста "39.3", который получается из текста "39,3" - пройдет успешно??

set n.pw = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN 0 ELSE RTRIM(replace(r.field11,',','.')) END

Сделайте так. Отделите рубли от копеек, 39*100+3, получите явно int, а затем записываете

set n.pw = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN convert(numeric(10,3),0)
ELSE convert(numeric(10,3), convert(double, convert(int,'рубли из поля r.field11')*100+convert(int,'копейки из поля r.field11'))/convert(double,100)) END

Как отделить рубли от копеек - надеюсь, понятно, берете запятую и все, что слева - рубли, все, что справа - копейки, если одна цифра, умножаете на 10, то есть 39,3 - это не 3 копейки, а 30 копеек.

Понятно?

вы там на своем как бы радио как бы совсем уже?
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707811
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968да и к numeric приводил тоже - не помогло
совсем других символов не видите??
напишите тогда так
WHEN ISNUMERIC(r.field11) <> 1 THEN 0.0
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707813
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKAndy_OLAP,

Ржал аки конь, таким только детей пугать
Я не понимаю, в чем причина юмора, я же не предлагаю автору темы готовое решение, я предлагаю ему подумать над проблемой глубже и со стороны и показывают путь размышлений.
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707815
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPTaPaKAndy_OLAP,

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

вы предлагаете взглянуть на гланды через анус.
так то оно конечно понятнее, но далеко не всем.
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707817
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так
Код: sql
1.
2.
3.
update n
set n.pw = isnull( try_convert(numeric(10,3),RTRIM(replace(r.field11,',','.'))) ,0)
FROM [DNRR].[dbo].[res1] r inner join [DNRR_test2].[dbo].[rich_] n on n.field4 = r.ndoc and n.field5 = r.ddoc and n.resid = r.resid
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707820
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPTaPaKAndy_OLAP,

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

1. Ошибка varchar value '39.3' to data type int.
2. Тип поля numeric(10,3)
откуда, то стойло что вы в кейсе настучали?

Ошибка возникает из за того что CASE всё приводит к старшему типу. Старший тип тит int из-за 0.
Привести все WHEN к одному вот и всё решение
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707831
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетительвы предлагаете взглянуть на гланды через анус.

Я предлагаю искать любой разделитель между рублями и копейками , получать сумму в копейках - которая может вылезти за пределы int, затем делить обратно на 100 и приводить к numeric(10,3). Я предлагаю автору темы подумать над тем, что все replace явно завязаны на предположение , что софт, работающий с таблицей, будет всегда в varchar столбцы записывать суммы с разделителем в виде запятой. А софт с какого-то момента может обновиться, и половина записей будет с одним разделителем, половина записей с другим.

Так более понятно?
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707836
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPПосетительвы предлагаете взглянуть на гланды через анус.

Я предлагаю искать любой разделитель между рублями и копейками , получать сумму в копейках - которая может вылезти за пределы int, затем делить обратно на 100 и приводить к numeric(10,3). Я предлагаю автору темы подумать над тем, что все replace явно завязаны на предположение , что софт, работающий с таблицей, будет всегда в varchar столбцы записывать суммы с разделителем в виде запятой. А софт с какого-то момента может обновиться, и половина записей будет с одним разделителем, половина записей с другим.

Так более понятно?
ага, любой разделитель

авторКак отделить рубли от копеек - надеюсь, понятно, берете запятую и все, что слева - рубли,
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707837
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
update n
set n.eim = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN 0.0 ELSE CAST(LTRIM(RTRIM(REPLACE(r.field11,',','.'))) as numeric(10,3)) END
FROM [DNRR].[dbo].[res1] r inner join [DNRR_test2].[dbo].[rich_] n on n.field4 = r.ndoc and n.field5 = r.ddoc and n.resid = r.resid

И даже в таком исполнении результат такой же
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707839
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968update n
set n.eim = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN 0.0 ELSE CAST(LTRIM(RTRIM(REPLACE(r.field11,',','.'))) as numeric(10,3)) END
FROM [DNRR].[dbo].[res1] r inner join [DNRR_test2].[dbo].[rich_] n on n.field4 = r.ndoc and n.field5 = r.ddoc and n.resid = r.resid

И даже в таком исполнении результат такой же
тот же это какой?
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707844
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ объект ошибки. Может там триггер
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707850
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Error converting data type varchar to numeric.

Триггеров там нет
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707852
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я уже и поле поменял, там есть такого же типа, просто уже в тупике
...
Рейтинг: 0 / 0
Ошибка при выполнении запроса
    #39707857
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968,

что выводит
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка при выполнении запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]