相关疑难解决方法(0)

SQL Server如何在内部存储十进制类型值?

在SQL Server中,您可以使用FLOATREAL存储浮点值,其存储格式由IEEE 754标准定义.对于定点值,我们可以使用DECIMAL类型(具有同义词NUMERIC).但是我不太确定SQL Server如何在DECIMAL内部存储值.例如,如果我定义一个表并插入如下行:

IF OBJECT_ID('dbo.test_number_types') IS NOT NULL DROP TABLE dbo.test_number_types;
CREATE TABLE dbo.test_number_types
(
    id INT IDENTITY(1, 1),
    c1 NUMERIC(5, 4)
)
GO

INSERT INTO dbo.test_number_types(c1)VALUES(5.7456);
Run Code Online (Sandbox Code Playgroud)

当我使用DBCC PAGE命令检查SQL Server如何存储数字5.7456时,我得到了这个:

01 70 E0 00 00
Run Code Online (Sandbox Code Playgroud)

这个十六进制字符串应该使用小端.我无法弄清楚SQL Server如何将5.7456转换为01 70 E0 00 00如何以及它如何确定积分部分的字节数以及小数部分的字节数.有人可以帮忙吗?


顺便说一下,我查过了"SQL Server 2012 Internals"这本书.有一章专门介绍数据类型.但似乎DECIMAL书中没有提到类型存储.

sql-server storage numeric internals

4
推荐指数
1
解决办法
887
查看次数

标签 统计

internals ×1

numeric ×1

sql-server ×1

storage ×1