我有一个用户定义的类型,几乎所有字段都是十进制的,一个是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
答案 0 :(得分:0)
在第7列和第12列中,您尝试插入的数字大于您在字段中定义的数字。如果字段是decimal(20,10)
的类型,则表示您可以在其中存储小数点左侧最多十位数,小数点右侧最多十位数的数字。如果你提供更大的数字,然后9999999999
(十九),那么SQL将抛出异常(如有问题)。
至少有两种选择。您可以使用"更大的"创建新的TYPE
字段(例如decimal(25,10)
)或删除此字段然后重新创建它。 (您无法更改TYPE
msdn中的字段)。
Documentation关于decimal
和numeric
数据类型。