处理sql用户定义类型中的异常

时间:2017-07-24 11:01:04

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

我有一个用户定义的类型,几乎所有字段都是十进制的,一个是big int。

但我不知道为什么我会得到这个例外:

  

将nvarchar转换为数据类型numeric的算术溢出错误   表值参数“@DataTable”的数据不是   符合参数的表格类型   声明已经终止。

我没有将任何nvarchar值传递给该类型。 这是类型的定义:

CREATE TYPE [dbo].[DataTable] AS TABLE(
    [Id] [bigint] NOT NULL,
    [Total1] [decimal](20, 10) NULL,
    [Total2] [decimal](20, 10) NULL,
    [Total3] [decimal](20, 10) NULL,
        [Total4] [decimal](20, 10) NULL,
        [Total5] [decimal](20, 10) NULL,
        [Total6] [decimal](20, 10) NULL,
        [Total7] [decimal](20, 10) NULL,
        [Total8] [decimal](20, 10) NULL,
        [Total9] [decimal](20, 10) NULL,
        [Total10] [decimal](20, 10) NULL,
        [Total11] [decimal](20, 10) NULL,
        [Total12] [decimal](20, 10) NULL,
        [Total13] [decimal](20, 10) NULL,
        [Total14] [decimal](20, 10) NULL,
        [Total15] [decimal](20, 10) NULL,
        [Total16] [int] NULL,
)

这是从c#

发送的集合
[0]= 12869
[1]= 54899440.29
[2] = 0
[3] = 0
[4] = 0
[5] = 54899440.29
[6] = 0
[7] = 82000000000.00
[8] = 54899440.29
[9] = 54899440.29
[10] = 0
[11] = 0
[12]= -81945100559.71 
[13] = 0.0
[14] = 0
[15] = 2013

1 个答案:

答案 0 :(得分:0)

在第7列和第12列中,您尝试插入的数字大于您在字段中定义的数字。如果字段是decimal(20,10)的类型,则表示您可以在其中存储小数点左侧最多十位数,小数点右侧最多十位数的数字。如果你提供更大的数字,然后9999999999(十九),那么SQL将抛出异常(如有问题)。

至少有两种选择。您可以使用"更大的"创建新的TYPE字段(例如decimal(25,10))或删除此字段然后重新创建它。 (您无法更改TYPE msdn中的字段)。

Documentation关于decimalnumeric数据类型。