共用方式為


使用 sql:field (XDR 結構描述)

重要注意事項重要事項

這個主題是舊版應用程式的參考。未來將不會繼續開發這項功能,請避免在新的開發工作中使用此功能,而是改用註解式 XSD 結構描述建立 XML 檢視。如需詳細資訊,請參閱<註解式 XSD 結構描述簡介 (SQLXML 4.0)>。您可以將現有註解式 XDR 結構描述轉換為 XSD 結構描述。如需詳細資訊,請參閱<將註解式 XDR 結構描述轉換為等效 XSD 結構描述 (SQLXML 4.0)>。

sql:field 註解會指定註解式結構描述內的元素和屬性與資料庫內的資料行之間的對應,而且可以加入到元素或屬性中。註解式結構描述的 <AttributeType> 元素上會忽略 sql:field 註解。sql:field 屬性會在資料表或檢視表中指定對應資料行的名稱。

例如,當資料行名稱不符合 XDR 中指定之結構描述內的欄位時,sql:field 可用來指定此資料行的名稱。sql:field 的值必須是資料行名稱。不允許四部分的資料行名稱 (例如 database.owner.table.columnname)。使用資料行名稱當做值的所有註解都是這個情況。

範例

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

A. 為 XDR 結構描述的 <attribute> 指定 sql:field

在這個註解式結構描述中,sql:field 註解是在結構描述的 <attribute> 元素上指定。sql:field 屬性會將此結構描述內的 Email 屬性對應到 Person.Contact 資料表中的 EmailAddress 資料行。

因為 XDR 結構描述內的屬性名稱 ContactID 與 Person.Contact 資料表內的 ContactID 資料行相同,所以不會指定 sql:field。對應會根據預設。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />
    <AttributeType name="Email" />
    <attribute type="ContactID" />
    <attribute type="Email" sql:field="EmailAddress" />
</ElementType>
</Schema>

針對結構描述測試範例 XPath 查詢

  1. 複製上述的結構描述程式碼,並將其貼到文字檔中。將檔案儲存為 sqlFieldXdr.xml。

  2. 複製下列範本,並將其貼到文字檔中。將檔案儲存為 sqlFieldXdrT.xml 並放在與 sqlFieldXdr.xml 相同的目錄中。範本中的查詢會選取 ContactID 為 1 的客戶。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlFieldXdr.xml">
        /Contacts[@ContactID="1"]
      </sql:xpath-query>
    </ROOT>
    

    指定給對應結構描述 (sqlFieldXdr.xml) 的目錄路徑相對於儲存範本的目錄。您也可以指定絕對路徑,例如:

    mapping-schema="C:\SqlXmlTest\sqlFieldXdr.xml"
    
  3. 建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs) 來執行範本。

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

部分結果集如下:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts ContactID="1" Email="gustavo0@adventure-works.com" /> 
</ROOT>

在對應結構描述中,可在全域宣告屬性 (例如在 <ElementType> 範圍外面宣告的 <AttributeType...>),然後在 <attribute type=...> 中參考,如這個結構描述所示。

在這個結構描述中,LastName 屬性是在全域宣告,而且在客戶 <ElementType> 的範圍中參考。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<AttributeType name="LastName" />
<ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />
    <AttributeType name="FName" />
    <AttributeType name="LName" />
    
    <attribute type="CustomerID" />
    <attribute type="FName" sql:field="FirstName" />
    <attribute type="LName" sql:field="LastName" />
</ElementType>
</Schema>

B. 為 XDR 結構描述中的 <element> 指定 sql:field

在這個註解式結構描述中,sql:field 註解是在結構描述中的 <element> 上指定。sql:field 註解會將此結構描述內的 <Email> 子元素對應到 Person.Contact 資料表中的 EmailAddress 資料行。

如果沒有明確註解,此結構描述中 <Contacts> 元素的 <Email> 子元素將不會對應到 Person.Contact 資料表的 EmailAddress 資料行,因為元素的預設對應是與關聯性的對應,而不是與欄位的對應 (例外情況是當 <ElementType> 包含 textOnly 屬性時)。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Email" />
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />

    <attribute type="ContactID" />
    <element type="Email" sql:field="EmailAddress" />
  </ElementType>
</Schema>

針對結構描述測試範例 XPath 查詢

  1. 複製上述的結構描述程式碼,並將其貼到文字檔中。將檔案儲存為 sqlFieldElementXdr.xml。

  2. 複製下列範本,並將其貼到文字檔中。將檔案儲存為 sqlFieldElementXdrT.xml 並放在與 sqlFieldElementXdr.xml 相同的目錄中。範本中的查詢會選取 ContactID 為 1 的客戶。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlFieldElementXdr.xml">
        /Contacts[@ContactID="1"]
      </sql:xpath-query>
    </ROOT>
    

    指定給對應結構描述 (sqlFieldElementXdr.xml) 的目錄路徑相對於儲存範本的目錄。您也可以指定絕對路徑,例如:

    mapping-schema="C:\SqlXmlTest\sqlFieldElementXdr.xml"
    
  3. 建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs) 來執行範本。

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

部分結果集如下:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts ContactID="1"> 
    <Email>gustavo0@adventure-works.com</Email> 
  </Contacts> 
</ROOT>

如果在電子郵件位址的 <ElementType> 上指定 content="textOnly",而且使用了 SQL 資料行的預設名稱 ("EmailAddress"),子元素上就不需要 sql:field 註解。在此情況下,<EmailAddress> 子元素將會對應到 Person.Contact 資料表中的 EmailAddress 資料行。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="EmailAddress" content="textOnly" />
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />

    <attribute type="ContactID" />
    <element type="EmailAddress" />
  </ElementType>
</Schema>