使用 sql:encode 要求 BLOB 數據的 URL 參考 (SQLXML 4.0)

適用於:SQL ServerAzure SQL 資料庫

在批注式 XSD 架構中,當屬性 (或 元素) 對應至 MICROSOFT SQL Server 中的 BLOB 資料行時,數據會以 XML 中的 Base 64 編碼格式傳回。

如果您想要傳回數據的參考(URI),以供稍後用來擷取二進位格式的 BLOB 數據,請指定 sql:encode 註釋。 您可以在簡單類型的屬性或專案上指定 sql:encode

指定 sql:encode 註釋,指出應該傳回欄位的 URL,而不是域的值。 sql:encode 取決於主鍵,以在 URL 中產生單一選取專案。 您可以使用 sql:key-fields 註釋來指定主鍵。

sql:encode 註釋可以指派 “url” 或 “default” 值。 值為 「default」 會傳回 Base 64 編碼格式的數據。

sql:encode 註釋不能與 sql:use-cdata 搭配使用,或在 ID、IDREF、IDREFS、NMTOKEN 或 NMTOKENS 屬性類型上使用。 它也無法與 XSD 固定 屬性搭配使用。

注意

BLOB 類型數據行不能當做索引鍵或外鍵的一部分使用。

範例

若要使用下列範例建立工作範例,您必須符合特定需求。 如需詳細資訊,請參閱 執行 SQLXML 範例的需求。

A. 指定 sql:encode 以取得 BLOB 數據的 URL 參考

在此範例中,對應架構會指定 LargePhoto 屬性上的 sql:encode,以擷取特定產品相片的 URI 參考(而不是以 Base 64 編碼格式擷取二進位數據)。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  
  <xsd:element name="ProductPhoto" sql:relation="Production.ProductPhoto"   
               sql:key-fields="ProductPhotoID" >  
   <xsd:complexType>  
      <xsd:attribute name="ProductPhotoID"  type="xsd:int"  />  
     <xsd:attribute name="LargePhoto" type="xsd:string" sql:encode="url" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
若要針對架構測試範例 XPath 查詢
  1. 複製上述架構程序代碼,並將它貼到文本檔中。 將檔案儲存為sqlEncode.xml。

  2. 複製下列範本,並將它貼到文字檔中。 將檔案儲存為sqlEncodeT.xml儲存sqlEncode.xml所在的相同目錄中。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="sqlEncode.xml">  
            /ProductPhoto[@ProductPhotoID=100]  
        </sql:xpath-query>  
    </ROOT>  
    

    為對應架構指定的目錄路徑 (sqlEncode.xml) 相對於儲存範本的目錄。 您也可以指定絕對路徑,例如:

    mapping-schema="C:\SqlXmlTest\sqlEncode.xml"  
    
  3. 建立並使用 SQLXML 4.0 測試腳本 (Sqlxml4test.vbs) 來執行範本。

    如需詳細資訊,請參閱使用 ADO 執行 SQLXML 4.0 查詢

以下是結果:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
   <ProductPhoto ProductPhotoID="100"  
                 LargePhoto="dbobject/Production.ProductPhoto[@ProductPhotoID="100"]/@LargePhoto" />   
</ROOT>