基本信息
- 数据库:SQL Server Express 2008 R2
- 客户端:SQL Server 管理工作室
背景(不感兴趣可跳过):
我正在维护的一个项目使用 ORM,它显然将我的枚举值(从 Byte 继承)存储到存储在 varbinary(max) 字段中的二进制序列化 .Net 对象中。我只是在出现一个新要求要求我的代码在中等信任下运行之后才发现这种情况发生了。由于 .Net 二进制格式化程序需要完全信任才能被调用,它开始在枚举上崩溃。
为了清理混乱,我需要创建迁移脚本,将这些 (varbinary(max)) 值转换回整数值。只有少数几个不同的值,所以它不应该是一个大问题(我认为)。
问题:
选择时,我能够获得 blob 的字符串表示形式:
SELECT BinValue FROM MyTable where Type = 'Object';
它返回一个字符串'0x...(十六进制值数组)'。
但是,当我尝试使用复制和粘贴在列上进行选择时,请确保我具有确切的二进制等效项:
SELECT ItemId FROM MyTable WHERE Value=convert(varbinary(max), '0x...')
它不返回任何记录。
那么是否可以使用客户端(例如 Management Studio)来解决这个问题?
如果是这样,正确的语法是什么?
做就是了
您正在将
varchar
表示转换varbinary(max)
为不正确的表示。SELECT CONVERT(VARBINARY(MAX), '0xAAFF')
0x307841414646
例如为我返回。它将根据默认排序规则代码页中该字符串表示中的字符代码为您提供结果。