Member 13692486 Ответов: 1

Ошибка Sql в файле журнала


Всем Привет,

Я новичок в программировании SQL и сталкиваюсь с проблемой в одном из живых сайтов.

У меня есть следующая ошибка SQL в файле журнала.

Локальный Стек Исключений:
Исключение [EclipseLink-4002] (Eclipse Persistence Services - 2.4.2.v20130514-5956486): org.eclipse.persistence.exceptions.DatabaseException
Внутреннее исключение: com.microsoft.sqlserver.jdbc.SQLServerException: преобразование не удалось при преобразовании значения nvarchar '2686000.75' в тип данных int.
Код Ошибки: 245
Звоните: выберите т0.DFY004_MDL_D, Макс(литой(Т1.DFY006_ATTR_VAL_X как int)), мин(литой(Т1.DFY006_ATTR_VAL_X как int)) Из VDFY006_DERTV_ATTR Т1 левое внешнее соединение VDFY003_DERTV на т0 (Т1.DFY003_DERTV_D = т0.DFY003_DERTV_D), где (((((т0.DFY004_MDL_D В (?,?,?,?,?)) И (t1.DFY005_ATTR_D = ?)) И (t1.DFY006_ATTR_VAL_X не равно нулю)) и (t1.DFY006_IS_DEL_F = ?)) И (t0.DFY014_STAT_D = ?)) Группа по t0.DFY004_MDL_D
bind => [8 параметров привязки]
Запрос: ReportQuery(referenceClass=DerivativeAttribute среда SQL="выбрать т0.DFY004_MDL_D, Макс(литой(Т1.DFY006_ATTR_VAL_X как int)), мин(литой(Т1.DFY006_ATTR_VAL_X как int)) Из VDFY006_DERTV_ATTR Т1 левое внешнее соединение VDFY003_DERTV на т0 (Т1.DFY003_DERTV_D = т0.DFY003_DERTV_D), где (((((т0.DFY004_MDL_D В ?) И (t1.DFY005_ATTR_D = ?)) И (t1.DFY006_ATTR_VAL_X не равно нулю)) и (t1.DFY006_IS_DEL_F = ?)) И (t0.DFY014_STAT_D = ?)) Группа по t0.DFY004_MDL_D")

Нужна помощь, чтобы понять проблему и шаги по ее решению.

Что я уже пробовал:

Помощник SQL Server[^]


[^]

1 Ответов

Рейтинг:
0

phil.o

"Преобразование не удалось при преобразовании значения nvarchar '2686000.75' в тип данных int"

Проблема довольно ясна: у вас есть столбец в базе данных, тип которого integer (int), и вы пытаетесь передать его строкой (nvarchar) (более того, это строковое значение представляет собой не само целое значение, а скорее значение с плавающей запятой).

Вы должны понимать важность типов данных, то, как они связаны и как вы должны управлять ими.


Member 13692486

Хорошо
но в соответствии со структурой БД я не уверен, откуда берется ncharvalue. Есть ли и скрипт SQL-запроса, который может помочь мне найти '2686000.7'

phil.o

Скорее всего, он исходит из одного из столбцов, содержимое которого вы пытаетесь привести к целому числу в своем повторном запросе SQL.
Но у вас есть большая проблема IMO: вы храните значения с плавающей запятой в виде nvarchar в своей базе данных. Всегда используйте правильный тип данных.
Не существует ранее существовавшего скрипта, который мог бы определить значение в любом столбце любой таблицы базы данных. У вас есть доступ к вашей схеме базы данных; проверьте ее; везде, где вы используете тип nvarchar вместо числового для хранения числовых значений, ваш дизайн несовершенен. Только вы можете это сделать, потому что только у вас есть доступ к полной схеме базы данных и данным.