powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка преобразования varchar в int
25 сообщений из 39, страница 1 из 2
Ошибка преобразования varchar в int
    #39696141
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй час бьюсь с этой ошибкой, но просветления в чем проблема не приходит. Есть запрос вида:
Код: sql
1.
2.
3.
4.
SELECT        dbo.Object.ObjectID, COALESCE (dbo.VInformation.ObjectInfo, dbo.VLawQualify.ObjectInfo) AS Expr1
FROM            dbo.Object LEFT OUTER JOIN
                         dbo.VInformation ON dbo.Object.ObjectID = dbo.VInformation.ObjectID LEFT OUTER JOIN
                         dbo.VLawQualify ON dbo.Object.ObjectID = dbo.VLawQualify.ObjectID


ObjectInfo может хранить строковое значение или null.
По отдельности запросы VInformation и VLawQualify выполняются без ошибок, но вот в таком варианте я получаю ошибку преобразования в int. Откуда вообще берется преобразование непонятно. Возможно что происходит попытка вычислить текстовое значение '5/10-А', на котором собственно и вылетает ошибка, но применение cast, convert эту ошибку не убирают.
Замена COALESCE на CASE порождает ту-же ошибку. Есть идеи?
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696146
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,

жените атрибуты разных типов данных, отсюда и ошибка.
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696167
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъВозможно что происходит попытка вычислить текстовое значение '5/10-А', на котором собственно и вылетает ошибка, но применение cast, convert эту ошибку не убирают.
Замена COALESCE на CASE порождает ту-же ошибку. Есть идеи?Очевидно, вы неправильно применили cast, convert.
Сначала расскажите алгоритм преобразований данных, которые вы хотите выполнить в данном запросе, простыми словами, себе, а потом уже легко напишется и правильный запрос на SQL.
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696170
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот только где они эти разные типы? Источники данных для COALESCE по отдельности ошибок не дают. Оба источника возвращают либо строку, либо null и вот в этом видимо и засада, но ведь COALESCE и должен сделать выбор как для таких данных.
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696171
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъВот только где они эти разные типы? Источники данных для COALESCE по отдельности ошибок не дают. Оба источника возвращают либо строку, либо null и вот в этом видимо и засада, но ведь COALESCE и должен сделать выбор как для таких данных.
просто скажите тип данных для обоих ObjectInfo
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696173
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,

сохраните результат, например, в таблице и посмотрите ее структуру.

sp_help 'схема.таблица'
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696174
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъВот только где они эти разные типы? Источники данных для COALESCE по отдельности ошибок не дают. Оба источника возвращают либо строку, либо null и вот в этом видимо и засада, но ведь COALESCE и должен сделать выбор как для таких данных.Посмотрите все поля, участвующие в запросе.
Очевидно, ошибка будет там, где поле типа INT как то взаимодействует с полем типа VARCHAR
Может, это поле dbo.VInformation.ObjectID, dbo.Object.ObjectID, dbo.VLawQualify.ObjectID, dbo.VInformation.ObjectInfo, dbo.VLawQualify.ObjectInfo
Вот для начала составьте список типов этих полей
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696176
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKСтрадалецъВот только где они эти разные типы? Источники данных для COALESCE по отдельности ошибок не дают. Оба источника возвращают либо строку, либо null и вот в этом видимо и засада, но ведь COALESCE и должен сделать выбор как для таких данных.
просто скажите тип данных для обоих ObjectInfoМожет, у него при джойне ошибка, может, какой то ID целочисленный, а какой то строка?
ТС же не показал ошибку.
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696177
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgTaPaKпропущено...

просто скажите тип данных для обоих ObjectInfoМожет, у него при джойне ошибка, может, какой то ID целочисленный, а какой то строка?
ТС же не показал ошибку.
ну я расшифоровываю "Источники данных для COALESCE по отдельности ошибок не дают" как тот же запрос только COALESE другой, но всё имеет право на жизнь :)
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696201
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот текст ошибки.
---------------------------
Microsoft SQL Server Management Studio
---------------------------
SQL Execution Error.

Executed SQL statement: SELECT dbo.Object.ObjectID, COALESCE (dbo.VLawQualify.ObjectInfo, dbo.VInformation.ObjectInfo) AS Expr1 FROM dbo.Object LEFT OUTER JOIN dbo.VInformation ON dbo.Object.ObjectID = dbo.VInformation.ObjectID LEFT OUTER JOIN dbo.VLawQualify ON dbo.Object....
Error Source: .Net SqlClient Data Provider
Error Message: Ошибка преобразования значения varchar "№ 52/1-697" в тип данных int.
Это значение содержится в VInformation.ObjectInfo и если выполнить запрос VInformation отдельно, никаких ошибок нет.

Не возникает ошибки если написать так:
Код: sql
1.
2.
3.
4.
SELECT        dbo.Object.ObjectID, COALESCE (dbo.VInformation.ObjectInfo, NULL) AS Expr1
FROM            dbo.Object LEFT OUTER JOIN
                         dbo.VInformation ON dbo.Object.ObjectID = dbo.VInformation.ObjectID LEFT OUTER JOIN
                         dbo.VLawQualify ON dbo.Object.ObjectID = dbo.VLawQualify.ObjectID
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696217
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,

типы будете в секрете держать?
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696220
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,

Помедитируйте над результатом запроса
Код: sql
1.
2.
3.
select
 sql_variant_property((select top (1) ObjectInfo from dbo.VInformation), 'BaseType'),
 sql_variant_property((select top (1) ObjectInfo from dbo.VLawQualify), 'BaseType')
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696222
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,

Код: sql
1.
2.
3.
4.
SELECT        dbo.Object.ObjectID, COALESCE (dbo.VInformation.ObjectInfo, cast(dbo.VLawQualify.ObjectInfo as Varchar(100))) AS Expr1
FROM            dbo.Object LEFT OUTER JOIN
                         dbo.VInformation ON dbo.Object.ObjectID = dbo.VInformation.ObjectID LEFT OUTER JOIN
                         dbo.VLawQualify ON dbo.Object.ObjectID = dbo.VLawQualify.ObjectID
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696236
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Страдалецъ,

Error Message: Ошибка преобразования значения varchar "№ 52/1-697" в тип данных int .

Какому числу соответствует "№ 52/1-697"?
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696247
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъНе возникает ошибки если написать так:Так сделайте конверт:
Код: sql
1.
COALESCE (convert(varchar(100), dbo.VLawQualify.ObjectInfo), convert(varchar(100), dbo.VInformation.ObjectInfo)) AS Expr1 
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696250
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

О каком конверте идет речь, если в первом же посте ТС написано: " Возможно что происходит попытка вычислить текстовое значение '5/10-А', на котором собственно и вылетает ошибка "?

И сообщение об ошибке он уже привел :" Error Message: Ошибка преобразования значения varchar "№ 52/1-697" в тип данных int"
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696251
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,
Помедитировал, как и ожидалось имеем varchar и null. Сделал запрос:

Код: sql
1.
2.
3.
select
(select top (1) ObjectInfo from dbo.VInformation),
 (select top (1) ObjectInfo from dbo.VLawQualify)


Получил ту-же ошибку.

Код: sql
1.
2.
 select
 coalesce((select top (1) cast(ObjectInfo as varchar(150)) from dbo.VInformation),(select top (1) ObjectInfo from dbo.VLawQualify))


Получил ту-же ошибку.

Сделал запрос по значениям возвращающимся из запроса:
Код: sql
1.
2.
 select
 coalesce('№ 52/1-697',null)


Получил ожидаемый '№ 52/1-697'

Все это я уже проверил в разных вариантах. Понимания, как победить проблему не добавило.
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696253
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Страдалецъ,

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

да скажи ты типы полей уже, медитатор

авторВы все еще не понимаете, что делаете.
вы тоже
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696260
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

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

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


тс. Ошибка это ака

Код: sql
1.
2.
3.
4.
5.
6.
7.
;WITH x(a,b) AS 
(
	SELECT	1	, NULL 
	UNION 
	SELECT	NULL	, '№ 52/1-697'
)
SELECT COALESCE (a,b) FROM x
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696263
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъinvm,
Помедитировал, как и ожидалось имеем varchar и null. Сделал запрос:

Код: sql
1.
2.
3.
select
(select top (1) ObjectInfo from dbo.VInformation),
 (select top (1) ObjectInfo from dbo.VLawQualify)



Получил ту-же ошибку.

У вас dbo.VInformation и/или dbo.VLawQualify это view, видимо.

Вот они криво и написаны.
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696264
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,

" Вот они криво и написаны ."

Не факт. Скорее всего криво используются.
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696266
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-lНе факт. Скорее всего криво используются.
Если select top 1 * from view падает с ошибкой, то проблема явно не в использовании
...
Рейтинг: 0 / 0
Ошибка преобразования varchar в int
    #39696270
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,

В самом первом ответе красиво сказано: " жените атрибуты разных типов данных ".

Дело не в top, а в coalesce:

Код: sql
1.
coalesce((select top (1) cast(ObjectInfo as varchar(150)) from dbo.VInformation),(select top (1) ObjectInfo from dbo.VLawQualify))



Т.е. имеем несовместимые типы данных и пытаемся всем миром привести их к одному.

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


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