基于MSDN我看到数字10-19使用相同的存储字节。
是否意味着将列从数字(11,3)转换为数字(18,3)不会占用更多存储空间?
所以,如果它真的那样,有什么风险? (假设我需要为10亿行表执行此操作,可能会得到不符合11,3的数值)。
答案 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