使用 BINARY BASE64 選項
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
若查詢中指定 BINARY BASE64 選項,就會以 Base64 編碼格式傳回二進位資料。
若未在查詢中指定 BINARY BASE64 選項,根據預設,AUTO 模式會支援二進位資料的 URL 編碼。 將會傳回資料庫之虛擬根目錄的相對 URL 參考。 此參考會指向執行查詢所在的資料庫。 所傳回參考可用來存取後續作業中的實際二進位資料。 這項存取動作是使用 SQLXML ISAPI dbobject
查詢來完成。 此查詢必須提供足夠的資訊才能識別影像。 這類資訊可能包含主索引鍵資料行。
資料行別名
當您查詢檢視並使用 FOR XML AUTO 模式時,請勿使用二進位資料行的別名。 若您使用別名,則會以二進位資料的 URL 編碼傳回別名。 在後續作業中,該別名不具任何意義。 無意義的別名和 URL 編碼無法用來擷取影像。
轉換成 BLOB
在 SELECT 查詢中,將任何資料行轉換成二進位大型物件 (BLOB) 可使資料行成為暫存實體。 BLOB 會暫時失去其相關聯的資料表名稱和資料行名稱。 這項轉換動作會使得 AUTO 模式查詢產生錯誤,因為系統不知道要將此值放入 XML 階層中的哪個位置。
例如,請考慮下表及其中一個資料列。
CREATE TABLE MyTable (Col1 int PRIMARY KEY, Col2 binary)
INSERT INTO MyTable VALUES (1, 0x7);
下列查詢會產生錯誤,這是由於轉換成二進位大型物件 (BLOB) 所造成:
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO;
解決方法是將 BINARY BASE64 選項加入 FOR XML 子句中。 若將轉換移除,則查詢會產生良好的結果。
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO, BINARY BASE64;
預期會有下列良好的結果:
<MyTable Col1="1" Col2="Bw==" />