SQL Server数值数据类型精度大小

时间:2015-07-22 20:12:34

标签: sql sql-server tsql type-conversion

基于MSDN我看到数字10-19使用相同的存储字节。

是否意味着将列从数字(11,3)转换为数字(18,3)不会占用更多存储空间?

所以,如果它真的那样,有什么风险? (假设我需要为10亿行表执行此操作,可能会得到不符合11,3的数值)。

1 个答案:

答案 0 :(得分:1)

似乎SQL Server将首先使用较低的存储选项(5个字节),然后达到该精度的最大值(9个字节)。但是(11,3)和(18,3)最大值均为9个字节。见下面的脚本。

至于你转换10亿行,因为它将是一个扩大的转换,我不认为你会有任何问题。您应该尽可能接近完整数据集进行测试。我不确定这种改变实际需要多长时间。

USE tempdb
GO

CREATE TABLE MyTest (TestCol NUMERIC(11,3))

INSERT INTO dbo.MyTest ( TestCol ) VALUES( 99999999.999 )
INSERT INTO dbo.MyTest ( TestCol ) VALUES( 9.999 )

SELECT Testcol, DATALENGTH(Testcol) AS Size
FROM dbo.MyTest


CREATE TABLE MyTest2 (TestCol NUMERIC(18,3))

INSERT INTO dbo.MyTest2 ( TestCol ) VALUES( 999999999999999.999 )
INSERT INTO dbo.MyTest2 ( TestCol ) VALUES( 9.999 )

SELECT Testcol, DATALENGTH(Testcol) AS Size
FROM dbo.MyTest2

DROP TABLE dbo.MyTest
DROP TABLE dbo.MyTest2