【发布时间】:2012-01-18 00:27:55
【问题描述】:
我将我的long 值保存在 SQL Server 表中为varbinary(max):
var savedValue = BitConverter.GetBytes(longValue);
现在我需要在 T-SQL 查询中使用该值,但是当我尝试获取值时:
select cast(Value as bigint) from dbo.MyValues
它返回不同的数值。例如,如果我在 .NET 中保存了 -8588797048854775808,在 T-SQL 中我会得到 33802181122903688
请告诉我有什么问题?这个问题有解决办法吗?
【问题讨论】:
-
为什么首先将 64 位整数保存为 varbinary?
-
通常,您会将 C# 中的
long存储为 SQL Server 中的bigint。您尝试将long存储为varbinary是否有特殊原因? -
因为 DB 字段不只包含 int64 类型的值。
-
您可以创建一个 C# 程序集并使用 SQL-CLR 将其安装到 SQL Server 中,以再次处理此转换回
Int64.... -
您的问题是绝对正确的,但在我的情况下,我只是重构已经存在的解决方案。我想按类型将该列划分为新的其他列。而且我需要将数据从旧列传输到新列而不会丢失,实际上我不能使用 .NET 应用程序或 CLR Intergating 来实现我的目标。
标签: sql-server tsql bigint