私たちの Sql Server DB には、大量のデータdecimal(19,6)
を 1 つの大きなものにパックする TSQL ロジックがいくつかvarbinary(max)
あります。これは、1 つの行で何千行もあるのではなく、DB のサイズを縮小するのに役立ちます。TSQL では、それぞれがsimple を介してdecimal(19,6)
変換されます。現在、TSQLはカーソル(おそらく非効率的...)を使用してそのようなジョブを実行し、低速です。当社の DBA は、.NET CLR 関数を使用する方がはるかに高速であると提案しています。varbinary(12)
cast as varbinary(12)
私はプレーンな 10 進数値で XML を取得する C# メソッドを持っています。SQL Server の 10 進数値の内部表現をどのようにシミュレートできるかという質問に今行き詰まっています。
私がこれまでに持っているものは次のとおりです。
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
はい、13 - は 19 です
06 - 6 は 19,6 です
00 - ??
00または01は明らかに符号です
AND 80841E00 は 40420F00 の 2 倍です。
10 進数はどのように保存されますか、その内部表現のバージョンは固有ですか (Google でうまく検索できなかったため)?
PS個人的には、C#でそのようなことをするのは悪い考えだと思います