使用 varbinary(max) 条件选择(在 where 子句中)

Lou*_*ers 3 sql-server-2008-r2 blob array

基础信息

  • 数据库:SQL Server Express 2008 R2
  • 客户:SQL Server Management Studio

背景(不感兴趣可跳过):

我正在维护的一个项目使用 ORM,它显然将我的枚举值(从 Byte 继承)存储到存储在 varbinary(max) 字段中的二进制序列化 .Net 对象中。我只是在出现新的要求要求我的代码在中等信任度下运行后才发现这种情况发生。由于 .Net 二进制格式化程序需要完全信任才能被调用,因此它开始在枚举上崩溃。

为了清理混乱,我需要创建迁移脚本,将这些 (varbinary(max)) 值转换回整数值。只有少数不同的值,所以这应该不是一个大问题(我认为)。

问题

选择时,我能够获得 blob 的字符串表示:

SELECT BinValue FROM MyTable where Type = 'Object';
Run Code Online (Sandbox Code Playgroud)

它返回一个字符串“0x...(一个十六进制值的数组)”。

但是当我尝试使用复制和粘贴在列上进行选择时,确保我有确切的二进制等效项:

SELECT ItemId FROM MyTable WHERE Value=convert(varbinary(max), '0x...')
Run Code Online (Sandbox Code Playgroud)

它不返回任何记录。

那么是否可以使用客户端(例如 Management Studio)来解决这个问题?

如果是这样,正确的语法是什么?

Mar*_*ith 6

做就是了

SELECT ItemId
FROM   MyTable
WHERE  Value = 0xAAFF 
Run Code Online (Sandbox Code Playgroud)

您正在将不正确的varchar表示转换为varbinary(max)

SELECT CONVERT(VARBINARY(MAX), '0xAAFF')0x307841414646例如,为我返回。它将根据默认排序规则代码页中该字符串表示中的字符代码为您提供结果。