Blob

使用 varbinary(max) 標准進行選擇(在 where 子句中)

  • August 5, 2014

基礎資訊

  • 數據庫: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)來解決這個問題?

如果是這樣,正確的語法是什麼?

做就是了

SELECT ItemId
FROM   MyTable
WHERE  Value = 0xAAFF 

您正在將varchar表示轉換varbinary(max)為不正確的表示。

SELECT CONVERT(VARBINARY(MAX), '0xAAFF')``0x307841414646例如為我返回。它將根據預設排序規則程式碼頁中該字元串表示中的字元程式碼為您提供結果。

引用自:https://dba.stackexchange.com/questions/35804