web-dev-qa-db-ja.com

SQL Serverが符号なしデータ型をサポートしないのはなぜですか?

符号なしintについて具体的に考えています。

実用的な例は次のとおりです。ID列が限界に達したらどうしますか? BigInt(4ではなく8バイトのストレージ)に移動するか、アプリケーションをリファクタリングして負の整数をサポートし、 this answer ;に示されている独自のルールを作成することもできます。これらのオプションはどちらも最適ではありません。

UIntは理想的なソリューションですが、SQL Serverはそれを提供しません(MySQLが提供する場合)。

署名されていないデータ型はSQL標準(SQL-2003)の一部ではないことを理解していますが、それでも私にとっては無駄に思えます。

これらを(SQL Serverまたは標準に)含めない理由は何ですか?

74
Romhein

推測しなければならないのであれば、タイプの急増を避けようとしていると言えます。一般的に言えば、符号なし整数ではできないこと、符号付き整数ではできないことは何もありません。 2147483648から4294967296の間の数値が必要な場合は、おそらく8バイトの整数にする必要があります。これは、数値が最終的に4294967296を超えるためです。

57
Jeff Hornby

そのためには、-2,147,483,648をシード値として使用できます。

Identity(-2147483648, 1)
45
CFreitas

同様の質問を見つけました Microsoft Connectで

Jim Hogg(プログラムマネージャー)からの返信には、符号なしintを追加するための長所と短所があります。主な短所は、暗黙の型変換を実装するルールを正しく行うのが悪夢になることです。

リクエストは「修正しない」としてクローズされました。

38
Anthony K