【问题标题】:How to store NUMERIC value as given in SQL Server如何存储 SQL Server 中给出的 NUMERIC 值
【发布时间】:2019-01-20 04:23:34
【问题描述】:

在 Oracle 中,当您有一个 NUMBER 数据类型并且不指定精度和比例时,例如 NUMBER(18,2) 并像这样使用它 NUMBER 相反,它将存储给定的值。

From the manual

如果未指定精度,则列存储给定值

现在我想知道是否有办法让 SQL Server 中的 NUMERIC 数据类型做同样的事情。我必须使用 NUMERIC 而不是 DECIMAL 或其他数据类型,并且我不能指定精度或比例,因为我无法测试将使用的数据是否会导致错误,因为我无法访问数据。我只知道数据不会对我们的 Oracle 数据库造成任何问题,它只使用 NUMBER 数据类型而没有任何规范。

【问题讨论】:

  • SQL Server 没有直接对应于 Oracle 的 NUMBER。此外,在 SQL Server 中,DECIMALNUMERIC 是同义词,因此您对“您使用NUMERIC 而不是DECIMAL”的要求并不连贯——这不是一个真正的选择。通常,仅仅因为列是NUMBER 并不意味着它会真正存储NUMBER 能够存储的所有内容——仔细调查应该会发现最合适的T-SQL 类型。如果您无权访问数据,那么最安全的类型实际上是字符串类型——但只有这样您才能在以后检查和转换这些值。
  • @JeroenMostert: 如果只使用DECIMAL,则默认为DECIMAL(18,0) - 所以小数点后没有数字.....
  • @marc_s:如果NUMBER 不用于存储小数值(通常可以从上下文中推断出),那么对于转换目的来说,这甚至不是一个糟糕的默认值(更大的值是不太可能,但如果它们发生就会触发溢出)。当然,问题在于,如果你弄错了,并且列无论如何都存储小数值,SQL Server 会默默地舍入它们。

标签: sql sql-server oracle types database-migration


【解决方案1】:

不,numeric 需要精度和比例,如果没有设置,则具有默认值。就这么简单。

https://docs.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-2017

引用:

decimal[ (p[ ,s] )] 和 numeric[ (p[ ,s] )] 固定精度和比例 数字。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。十进制的 ISO 同义词是 dec 和 dec(p, s)。 numeric 在功能上等同于 decimal。

通常,文档是您的朋友。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2010-12-24
    相关资源
    最近更新 更多