用户定义的无符号64位值类型与NUMERIC(20,0)

时间:2011-05-25 13:58:59

标签: tsql sql-server-2008 sql-server-2008-r2

假设我想创建一个包含一些列的表,我希望包含64位无符号整数。我可以采用以下几种不同的方式,其中一些可能无效或有后果:

  1. 使用NUMERIC(20,0)并添加一个检查约束,该约束确保该值不是负值并且在64位无符号整数的范围内(即> = 0和< 18,446,744,073,709,551,616)。此外,检查约束的逻辑可以封装在UDF中,以避免冗余。
  2. 创建一个封装此逻辑的CLR用户定义类型(最终包装System.UInt64)。对列类型和存储过程参数使用类型。这种类型是否会给我更大的能力(例如,通过防止无效值被传递到呼叫站点的存储过程中)?
  3. 重用BCL System.UInt64类型。这甚至可能吗?
  4. 我正在寻找对SQLCLR的能力/整合有所了解的人,以评估我的观点,并评论最佳行动方案。

    由于

1 个答案:

答案 0 :(得分:0)

使用数字(20,0)和检查约束来限制0 <= x <= 18446744073709551615(在编辑时修复)

SQL Server没有无符号64但是整数所以你必须在客户端做一些逻辑才能使它看起来不是十进制

需要检查上限,因为19E18多于无符号64但数字(20,0)正常。如果DB值在客户端中溢出和中断,则可能不需要这样做。

如果您确定需要额外的零,则可以更改为numeric (23, 0)或更高......