我們的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#中做這樣的事情是一個壞主意。