【发布时间】:2019-01-20 04:23:34
【问题描述】:
在 Oracle 中,当您有一个 NUMBER 数据类型并且不指定精度和比例时,例如 NUMBER(18,2) 并像这样使用它 NUMBER 相反,它将存储给定的值。
如果未指定精度,则列存储给定值
现在我想知道是否有办法让 SQL Server 中的 NUMERIC 数据类型做同样的事情。我必须使用 NUMERIC 而不是 DECIMAL 或其他数据类型,并且我不能指定精度或比例,因为我无法测试将使用的数据是否会导致错误,因为我无法访问数据。我只知道数据不会对我们的 Oracle 数据库造成任何问题,它只使用 NUMBER 数据类型而没有任何规范。
【问题讨论】:
-
SQL Server 没有直接对应于 Oracle 的
NUMBER。此外,在 SQL Server 中,DECIMAL和NUMERIC是同义词,因此您对“您使用NUMERIC而不是DECIMAL”的要求并不连贯——这不是一个真正的选择。通常,仅仅因为列是NUMBER并不意味着它会真正存储NUMBER能够存储的所有内容——仔细调查应该会发现最合适的T-SQL 类型。如果您无权访问数据,那么最安全的类型实际上是字符串类型——但只有这样您才能在以后检查和转换这些值。 -
@JeroenMostert: 如果只使用
DECIMAL,则默认为DECIMAL(18,0)- 所以小数点后没有数字..... -
@marc_s:如果
NUMBER不用于存储小数值(通常可以从上下文中推断出),那么对于转换目的来说,这甚至不是一个糟糕的默认值(更大的值是不太可能,但如果它们发生就会触发溢出)。当然,问题在于,如果你弄错了,并且列无论如何都存储小数值,SQL Server 会默默地舍入它们。
标签: sql sql-server oracle types database-migration