T-SQL可以存储ulong的吗?

Oni*_*ght 14 .net c# sql ulong bigint

我想将C#.NET存储ulong到T-SQL数据库中.我没有看到任何相关的规定,因为SQL bigint具有与正常相同的最小/最大值long.

有什么方法可以做到这一点吗?还是抓住了OverflowException我唯一的希望?

Nei*_*l N 9

这应该回答你的问题:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/ff08c190-a981-4896-9542-3f64b95a84a2/

您将使用BigInt,您只需要小心如何将签名类型转换回C#中的无符号类型

// This has not been tested
unchecked
{
    myUlong = myDataReader.GetInt64(...);
}
Run Code Online (Sandbox Code Playgroud)

...

另一种可能性是使用长度为8的VarBinary,然后在C#中将字节转换为ulong


Jon*_*han 6

我知道它不一样,但是会这样做:

select convert(decimal(38, 0), 12345678901234567890123456789012345678)
Run Code Online (Sandbox Code Playgroud)

无符号长度的最大值似乎是18,446,744,073,709,551,615,这远小于此小数可以存储的值.可能存在转换问题,但我确信应用程序中的几个包装器函数会很快排序.

  • @ Onion-Knight无符号长的[最大值](http://msdn.microsoft.com/en-us/library/t98873t4(v = VS.100).aspx)是18,446,744,073,709,551,615,这意味着你只需要`DECIMAL (20,0)`.这需要13而不是17个字节.`DECIMAL`优于`BIGINT`的优点是它将保留你存储的数字的语义.查看数字的任何其他应用程序,ETL,报告或人员都将理解它们.从数据架构师的角度来看,这证明了存储惩罚的合理性.另一方面,"BIGINT"将向读者呈现负数(即谎言). (7认同)