Theo BOL cho SQL Server 2008 R2, số thập phân kiểu dữ liệu yêu cầu các byte lưu trữ sau:
Precision Storage bytes
1 - 9 => 5
10-19 => 9
20-28 => 13
29-38 => 17
Tuy nhiên, khi tôi thực hiện một datalength () trên một cột được định dạng thập phân (19,5) và có giá trị 10999.99999 tôi có nhận được 5 byte không? Theo hiểu biết của tôi, độ chính xác là 10 chứ không phải 9 và sẽ dẫn đến 9 byte.
Điều này dẫn đến hai câu hỏi:
kích thước của bảng với cột này không phụ thuộc vào định nghĩa cột, thay vào đó các giá trị thực trong cột xác định kích thước bảng?
tại sao thông tin trong BOL không khớp với datalength () trả về?
DATALENGTHbáo cáo 5 hoặc 9 byte trong trường hợp này dường như là 42949.67295(được lưu trữ dưới dạng 01 FF FF FF FF 00 00 00 00) và 42949.67296(được lưu trữ dưới dạng 01 00 00 00 00 01 00 00 00). Không chắc chính xác hành vi đó hữu ích như thế nào!
CREATE TABLE [Test195]( [Date] [date] NULL, [Time] [time](3) NULL, [CCYPairID] [tinyint] NULL, [Price] [decimal](19, 5) NULL, [Amount] [bigint] NULL, ) SELECT [Date] ,[Time] ,[CCYPairID] ,DATALENGTH([CCYPairID]) as CByte ,[Price] ,DATALENGTH([Price]) as PByte ,[Amount] ,DATALENGTH([Amount]) as AByte FROM [Test195]