【问题标题】:Arithmetic overflow error converting numeric to data type numeric on insert在插入时将数字转换为数据类型数字的算术溢出错误
【发布时间】:2013-02-27 02:01:32
【问题描述】:

我遇到了显示算术溢出错误的查询。

INSERT INTO seed_health_testing_form (seedlotno, modeoftesting, datetested, 
    datecollected, placecollected, sampleno, germination1, germination2, 
    germination3, germination4, germination5, germination6, germination7, 
    germination8, germination9, germination10, remarks) 
VALUES ( 'A00075', 'GTest', '2/14/2013', 
    '2/19/2013', 'Laguna', 0, 50.00, 50.00, 
    50.00, 50.00, 0.00, 0.00, 0.00, 
    0.00, 0.00, 0.00, '')

表格设计

[id]                [int]       IDENTITY(1,1) PRIMARY KEY NOT NULL
[seedlotno]         [varchar](50)   NULL
[modeoftesting]     [varchar](100)  NULL
[datetested]        [datetime]      NULL
[datecollected]     [datetime]      NULL
[placecollected]    [varchar](100)  NULL
[sampleno]          [int]           NULL
[germination1]      [decimal](3, 2) NULL
[germination2]      [decimal](3, 2) NULL
[germination3]      [decimal](3, 2) NULL
[germination4]      [decimal](3, 2) NULL
[germination5]      [decimal](3, 2) NULL
[germination6]      [decimal](3, 2) NULL
[germination7]      [decimal](3, 2) NULL
[germination8]      [decimal](3, 2) NULL
[germination9]      [decimal](3, 2) NULL
[germination10]     [decimal](3, 2) NULL
[remarks]           [varchar](1000) NULL

我尝试逐行中断 INSERT 查询以跟踪错误的位置,但它始终指向第 1 行。但我仍然找不到问题所在。

【问题讨论】:

    标签: sql sql-server tsql sql-server-2008-r2


    【解决方案1】:

    您的所有[decimal](3, 2) 数据类型都是问题所在。

    (3,2) 告诉您该数字总共可以具有 3 位的精度,其中 2 位保留用于小数部分。

    因此,您只有 1 位可用于存储像 50 这样的值,这会导致溢出。

    请参阅decmial datatype documentation 了解更多信息。

    【讨论】:

    • 我认为 (3,2) 是 3 个整数和 2 个小数。这就是为什么 1.00 不会给我错误。谢谢
    猜你喜欢
    • 2021-10-29
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多