あなたのコメントから、それに対して算術を行っていない場合(つまり、単なる識別子である場合)、そもそも数値である必要はありません-おそらく単純にすべきではありません-。データベースと消費アプリケーションの両方で文字列として扱い、先に進みます。
ただし、実際に数字を持っている質問への将来の訪問者には、考えられる2つのオプションがあります。
varchar
およびBigInteger.Parse(string)
/を使用BigInteger.ToString()
varbinary
およびBigInteger..ctor(byte[])
/を使用BigInteger.ToByteArray()
バイナリ ルートを使用すると、パフォーマンスやスペースの利点が得られる可能性がありますが、その値を使用する必要がある他のアプリケーションが制限される可能性もあります。私見ですが、毎秒これらの多くを解析するつもりでない限り、本当に手間をかける価値があるとは思えません。また、最近のストレージは安価です。
さらに、最近では文字列がデファクトシリアライゼーション メソッド (XML や JSON など) になっているvarchar
ようです。
ただし、これらのオプションを使用すると、データベースの外部で算術とソートを行う必要があります。これが並べ替え/フィルター処理/操作が必要なデータである場合は、戦略を再考する必要があるかもしれません。(@MikeB のコメントを参照)
自然な並べ替え順序の問題 (まだ算術演算はできません) を回避するには、文字列をゼロで埋めて固定長にすることができます。私の提案は、永続化された計算列を使用してゼロを埋めることです。列データを永続化する場合は、それにインデックスを付けることもできます。ソートを行うときは、パディングされた列でソートするようにしてください。SQL フィドルのデモ
または、最後のオプションは、特に CLR 型を作成して wrapBigInteger
することです。これにより、SQL Server で直接使用できます (つまり、比較と演算に使用できます)。繰り返しますが、手間をかける価値があるかどうかはわかりませんが、大量の計算を行う必要がある場合は、これが最速の方法かもしれません.