我们的SQL Server数据库有一个包吨decimal(19,6)
成一个大varbinary(max)
一些TSQL逻辑 - 它有助于减少数据库的大小,而不是几千行,我们有一个排。在TSQL中,每个decimal(19,6)
都通过简单的cast as varbinary(12)
转换为varbinary(12)
。现在,TSQL使用游标(可能效率不高......)来做这样的工作,而且速度很慢。我们的DBA建议使用.NET CLR功能会更快。算法模拟为SQL Server小数VARBINARY
我有C#方法获取XML与普通十进制值。我现在坚持与问题如何模拟SQL Server内部表示的十进制值。
我至今是:
DECLARE @x decimal(19,6)
SELECT @x = 0
SELECT CAST(@x AS VARBINARY(12))
-- 0x13 06 00 01 00000000
SELECT @x = 1
SELECT CAST(@x AS VARBINARY(12))
--0x13 06 00 01 40420F00
SELECT @x = -1
SELECT CAST(@x AS VARBINARY(12))
--0x13 06 00 00 40420F00
SELECT @x = 1.1
SELECT CAST(@x AS VARBINARY(12))
--0x13 06 00 01 E0C81000
SELECT @x = 2
SELECT CAST(@x AS VARBINARY(12))
--0x13 06 00 01 80841E00
OK, 13 - 19
06 - 6这是19,6
00 - ??
00或01的标志显然
和80841E00比40420F00的两倍大。
十进制存储如何,是内部表示版本特定(因为我没有设法成功谷歌它)?
P.S.就我个人而言,我认为在C#中做这样的事情是一个坏主意。