【问题标题】:Handling exception in sql user defined type处理 sql 用户定义类型中的异常
【发布时间】:2017-07-24 11:01:03
【问题描述】:

我有一个用户定义的类型,它几乎所有的字段都是十进制的,一个是大整数。

但我不知道为什么会出现此异常:

将 nvarchar 转换为数字数据类型时出现算术溢出错误。
表值参数“@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

【问题讨论】:

  • 在第 7 列和第 12 列中,您尝试插入大于您的字段的数字。
  • 那我该如何处理呢?以及它如何更大。我已经将 (20,10) 作为精度。
  • 5489944.0.29 有 2 个小数点...(第二个值)
  • 那是错误的。类型错误
  • 好吧,你可以(甚至你必须)将你的列扩展到例如decimal(25,10)There 是关于小数的文档。

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


【解决方案1】:

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

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

Documentation 关于 decimalnumeric 数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多