Я довольно новичок в базе данных, и у меня есть некоторые проблемы с этим вставным запросом, который вставляет запись на Microsoft SQL Server.Почему я получаю эту ошибку «Арифметическая ошибка переполнения, преобразующая числовые данные в числовой тип данных» в этот простой запрос на вставку на Microsoft SQL Server?
Так я это QS_TirPolizza стол, имеющий следующие поля:
ID bigint
Polizzaid bigint
BankerID varchar
ReteVendita varchar
PercentualeRendimentoDaInizioGestione decimal
PercentualeRendimentoDaInizioAnno decimal
PercentualeRendimentoDaInizioTrimestre decimal
DataCalcoloBF datetime
AnnoRiferimento int
PremioInizialeVersato money
PremiVersatiInAnnoRiferimento money
ImportiRiscattatiInAnnoRiferimento money
CedoleErogateInAnnoRiferimento money
ControvaloreTotale money
DataRiferimentoNav datetime
RisultatoAnnuoInAnnoRiferimento money
PremioInizialeVersatoDaInizioGestione money
PremiVersatiDaInizioGestione money
ImportiRiscattatiDaInizioGestione money
CedoleErogateDaInizioGestione money
RisultatoAnnuoDaInizioGestione money
CapitaleCasoMorte money
Timestamp datetime
QuoteTotale decimal
PercentualeRendimentoDaInizioMese decimal
PercentualeRendimentoDaInizioSemestre decimal
ControvaloreTotaleAnnoPrecedente money
DataControvaloreTotaleAnnoPrecedente datetime
MsgPercentualeRendimentoDaInizioAnno varchar
MsgPercentualeRendimentoDaInizioGestione varchar
MsgPercentualeRendimentoDaInizioMese varchar
MsgPercentualeRendimentoDaInizioSemestre varchar
MsgPercentualeRendimentoDaInizioTrimestre varchar
isTirAnomalo bit
И это моя вставка запроса:
insert into QS_TirPolizza(
annoRiferimento,
bankerID,
controvaloreTotale,
dataCalcoloBF,
dataRiferimentoNav,
percentualeRendimentoDaInizioAnno,
percentualeRendimentoDaInizioGestione,
percentualeRendimentoDaInizioMese,
percentualeRendimentoDaInizioSemestre,
percentualeRendimentoDaInizioTrimestre,
polizzaId,
premioInizialeVersato,
premioInizialeVersatoDaInizioGestione,
quoteTotale,
reteVendita,
timestamp,
isTirAnomalo
) values (
2015,
'XXXXXXXXXXXXXXXXXXXX',
2993197.200971,
'2015-05-30 14:22:54',
'2015-05-30 14:22:56',
-139852.94674,
-0.22452,
null,
null,
-115890.54469,
123456789,
2999932.770000,
2999932.770000,
255388.71925,
'TEST',
'2015-05-30 14:23:25',
0
)
Где поля percentualeRendimentoDaInizioAnno, percentualeRendimentoDaInizioGestione, percentualeRendimentoDaInizioMese, percentualeRendimentoDaInizioSemestre, percentualeRendimentoDaInizioTrimestre имеет decimal как тип определения таблицы.
Проблема заключается в том, что выполнение предыдущего запроса я получить следующее сообщение об ошибке, и запись не вставлена:
15:00:14 [ВСТАВИТЬ - 0 строк (ы), 0.000 сек] [Ошибка Код: 8115, SQL Состояние: S0008] Ошибка арифметического переполнения, преобразующая числовые данные в данные Тип числовой.
Я думаю, что проблема в том, что эти значения имеют много цифр, потому что сокращение цифр, связанных со всем, и до десятичных разделов этого числа, отлично работает. Infact этот второй вариант запроса (то есть число с меньшим количеством цифр для предыдущих полей) работает отлично:
insert into QS_TirPolizza(
annoRiferimento,
bankerID,
controvaloreTotale,
dataCalcoloBF,
dataRiferimentoNav,
percentualeRendimentoDaInizioAnno,
percentualeRendimentoDaInizioGestione,
percentualeRendimentoDaInizioMese,
percentualeRendimentoDaInizioSemestre,
percentualeRendimentoDaInizioTrimestre,
polizzaId,
premioInizialeVersato,
premioInizialeVersatoDaInizioGestione,
quoteTotale,
reteVendita,
timestamp,
isTirAnomalo
) values (
2015,
'XXX123YYY',
2993197.200971,
'2015-05-30 14:22:54',
'2015-05-30 14:22:56',
-139.9,
-0.22,
null,
null,
-110.54469,
1234567890,
2999932.770000,
2999932.770000,
255388.71925,
'ISPB',
'2015-05-30 14:23:25',
0
)
Эти значения генерируются приложением Java, и я не могу укоротить так, что я могу сделать? Есть ли какой-то лучший тип данных, который может корректно содержать эти данные на SQL-сервере?