使用 sql:is-constant 创建常量元素 (SQLXML 4.0)

若要指定常量元素,即 XSD 架构中不映射到任何数据库表或列的元素,可以使用 sql:is-constant 批注。该批注取布尔值(0 = false,1 = true)。可接受的值为 0、1、true 和 false。可以在不具有任何属性的元素中指定 sql:is-constant 批注。如果使用值 true(或 1)在元素中指定该批注,则该元素不会被映射到数据库,但仍出现在 XML 文档中。

sql:is-constant 批注可以用于以下操作:

  • 将顶级元素添加到 XML 文档。XML 要求为文档提供一个顶级元素(根元素)。

  • 创建容器元素,例如包装所有订单的 <Orders> 元素。

可以向 <complexType> 元素添加 sql:is-constant 批注。

示例

若要创建使用以下示例的工作示例,必须满足一些要求。有关详细信息,请参阅运行 SQLXML 示例的要求

A. 指定 sql:is-constant 以添加容器元素

在该带批注的 XSD 架构中,通过使用值 1 指定属性 sql:is-constant,将 <CustomerOrders> 定义为常量元素。因此,<CustomerOrders> 不会被映射到任何数据库表或列。该常量元素由 <Order> 子元素组成。

虽然 <CustomerOrders> 不映射到任何数据库表或列,它仍然会作为包含 <Order> 子元素的容器元素出现在生成的 XML 中。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
  <xsd:appinfo>
    <sql:relationship name="CustOrders"
        parent="Sales.Customer"
        parent-key="CustomerID"
        child="Sales.SalesOrderHeader"
        child-key="CustomerID" />
  </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Customer" sql:relation="Sales.Customer" >
   <xsd:complexType>
     <xsd:sequence>
        <xsd:element name="CustomerOrders" sql:is-constant="1" >
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"
                           sql:relationship="CustOrders" 
                           maxOccurs="unbounded" >
                <xsd:complexType>
                   <xsd:attribute name="SalesOrderID" type="xsd:integer" />
                   <xsd:attribute name="OrderDate" type="xsd:date" />
                   <xsd:attribute name="CustomerID" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
           </xsd:complexType>
          </xsd:element>
         </xsd:sequence>
          <xsd:attribute name="CustomerID" type="xsd:string" />
     </xsd:complexType>
  </xsd:element>
</xsd:schema>

针对该架构测试示例 XPath 查询

  1. 复制上面的架构代码,并将它粘贴到文本文件中。将该文件另存为 isConstant.xml。

  2. 复制以下模板,并将它粘贴到文本文件中。在保存 isConstant.xml 的同一目录中将该文件另存为 isConstantT.xml。

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

    为映射架构 (isConstant.xml) 指定的目录路径是相对于模板保存目录的相对路径。也可以指定绝对路径,例如:

    mapping-schema="C:\MyDir\isConstant.xml"
    
  3. 创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。

    有关详细信息,请参阅使用 ADO 执行 SQLXML 查询

部分结果集如下:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
<Customer CustomerID="1"> 
  <CustomerOrders> 
    <Order SalesOrderID="43860" OrderDate="2001-08-01" CustomerID="1" /> 
    <Order SalesOrderID="44501" OrderDate="2001-11-01" CustomerID="1" /> 
    <Order SalesOrderID="45283" OrderDate="2002-02-01" CustomerID="1" /> 
    <Order SalesOrderID="46042" OrderDate="2002-05-01" CustomerID="1" /> 
    ...
  </CustomerOrders> 
</Customer> 
</ROOT>