假设我想创建一个包含一些列的表,我希望包含64位无符号整数。我可以采用以下几种不同的方式,其中一些可能无效或有后果:
NUMERIC(20,0)
并添加一个检查约束,该约束确保该值不是负值并且在64位无符号整数的范围内(即> = 0和< 18,446,744,073,709,551,616)。此外,检查约束的逻辑可以封装在UDF中,以避免冗余。我正在寻找对SQLCLR的能力/整合有所了解的人,以评估我的观点,并评论最佳行动方案。
由于
答案 0 :(得分:0)
使用数字(20,0)和检查约束来限制0 <= x <= 18446744073709551615
(在编辑时修复)
SQL Server没有无符号64但是整数所以你必须在客户端做一些逻辑才能使它看起来不是十进制
需要检查上限,因为19E18多于无符号64但数字(20,0)正常。如果DB值在客户端中溢出和中断,则可能不需要这样做。
如果您确定需要额外的零,则可以更改为numeric (23, 0)
或更高......