如何存储SQL Server中给定的数值

如何存储SQL Server中给定的数值,sql,sql-server,oracle,types,database-migration,Sql,Sql Server,Oracle,Types,Database Migration,在Oracle中,如果您有一个数字数据类型,并且没有像NUMBER(18,2)那样指定精度和比例,而是像这样使用NUMBER,那么它将按照给定的方式存储值 如果未指定精度,该列将按给定值存储值 现在我想知道是否有一种方法可以让SQL Server中的数字数据类型也这样做。我必须使用数字而不是十进制或其他数据类型,我不允许指定精度或刻度,因为我无法测试将使用的数据是否会导致错误,因为我无法访问数据。我只知道数据没有给我们的Oracle数据库带来任何问题,它只使用数字数据类型,没有任何规格。否,n

在Oracle中,如果您有一个数字数据类型,并且没有像
NUMBER(18,2)
那样指定精度和比例,而是像这样使用
NUMBER
,那么它将按照给定的方式存储值

如果未指定精度,该列将按给定值存储值


现在我想知道是否有一种方法可以让SQL Server中的数字数据类型也这样做。我必须使用数字而不是十进制或其他数据类型,我不允许指定精度或刻度,因为我无法测试将使用的数据是否会导致错误,因为我无法访问数据。我只知道数据没有给我们的Oracle数据库带来任何问题,它只使用数字数据类型,没有任何规格。

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

引述:

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


像通常一样,文档是您的朋友。

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

引述:

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


像通常一样,文档是您的朋友。

SQL Server与Oracle的
NUMBER
没有直接对应。此外,在SQL Server中,十进制和数字是同义词,因此您要求“您必须使用
数字而不是
十进制”的要求是不一致的,这不是真正的选择。通常,仅仅因为列是
NUMBER
并不意味着它将真正存储
NUMBER
能够存储的所有内容——更仔细的调查应该会发现最合适的T-SQL类型。如果您无法访问数据,那么最安全的类型实际上是字符串类型——但只有这样您才能在以后检查和转换值。@JeroenMostert:如果只使用
DECIMAL
则默认为
DECIMAL(18,0)
-因此小数点后没有数字…@marc_s:如果不使用
数字来存储分数值(通常可以从上下文中推断),那么出于转换目的,这甚至不会是一个很糟糕的默认值(较大的值是不可能的,但无论如何都会触发溢出)。当然,问题是,如果您弄错了,并且该列仍在存储小数,SQL Server将自动对其进行取整。SQL Server与Oracle的
NUMBER
没有直接对应。此外,在SQL Server中,十进制和数字是同义词,因此您要求“您必须使用
数字而不是
十进制”的要求是不一致的,这不是真正的选择。通常,仅仅因为列是
NUMBER
并不意味着它将真正存储
NUMBER
能够存储的所有内容——更仔细的调查应该会发现最合适的T-SQL类型。如果您无法访问数据,那么最安全的类型实际上是字符串类型——但只有这样您才能在以后检查和转换值。@JeroenMostert:如果只使用
DECIMAL
则默认为
DECIMAL(18,0)
-因此小数点后没有数字…@marc_s:如果不使用
数字来存储分数值(通常可以从上下文中推断),那么出于转换目的,这甚至不会是一个很糟糕的默认值(较大的值是不可能的,但无论如何都会触发溢出)。当然,问题是,如果您弄错了,并且该列仍在存储小数,SQL Server将自动对其进行取整。