精品国产亚洲一区二区三区,男女作爱在线观看免费网站,欧美的又大又长做禁片A片,97国产精品人妻无码久久久

  • 相關軟件
    >OPENXML 創(chuàng)建者:webmaster 更新時間:2006-02-16 15:51

    OPENXML 通過 XML 文檔提供行集視圖。由于OPENXML 是行集提供程序,因此可在會出現(xiàn)行集提供程序(如表、視圖或 OPENROWSET 函數(shù))的 Transact-SQL 語句中使用 OPENXML。



    語法


    OPENXML(idoc int [in],rowpattern nvarchar[in],[flags byte[in]])

    [WITH (SchemaDeclaration | TableName)]



    參數(shù)


    idoc



    是 XML 文檔的內(nèi)部表式法的文檔句柄。通過調(diào)用 sp_xml_preparedocument 創(chuàng)建 XML 文檔的內(nèi)部表式法。



    rowpattern



    是 XPath 模式,用來標識要作為行處理的節(jié)點(這些節(jié)點在 XML 文檔中,該文檔的句柄由 idoc 參數(shù)傳遞)。



    flags



    表示應在 XML 數(shù)據(jù)和關系行集間使用映射以及應如何填充溢出列。flag 為可選輸入?yún)?shù),可以是下列值之一。





























    字節(jié)值

    描述
    0默認為以特性為中心的映射。
    1使用以特性為中心的映射。

    在某些情況下,可以將它與 XML_ELEMENTS 組合使用。使用時首先應用以特性為中心的映射,然后對于所有仍未處理的列應用以元素為中心的映射。
    2使用以元素為中心的映射。

    在某些情況下,可以將它與 XML_ATTRIBUTES 組合使用。使用時先應用以特性為中心的映射,然后對于所有仍未處理的列應用以元素為中心的映射。
    8可與 XML_ATTRIBUTES 或 XML_ELEMENTS 組合使用(邏輯 OR)。

    在檢索的上下文中,該標志指明不應將已消耗的數(shù)據(jù)復制到溢出屬性 @mp:xmltext



    SchemaDeclaration



    是窗體的架構(gòu)定義:

    ColName ColType [ColPattern | MetaProperty][, ColName ColType [ColPattern | MetaProperty]...]


    ColName


    是行集中的列名。



    ColType


    是行集中列的 SQL 數(shù)據(jù)類型。如果列類型不同于特性的基礎 XML 數(shù)據(jù)類型,那么將發(fā)生類型壓制。如果列的類型是 TIMESTAMP,則當從 OPENXML 行集中進行選擇時,將忽略 XML 文檔中現(xiàn)有的值并返回自動填充值。



    ColPattern


    是可選的通用 XPath 模式,它說明應如何將 XML 節(jié)點映射到列。如果沒有指定 ColPattern,那么發(fā)生默認的映射(由 flags 指定的以特性為中心或以元素為中心的映射)。

    指定為 ColPattern 的 XPath 模式用于指定特殊的映射性質(zhì)(如果發(fā)生以特性為中心和以元素為中心的映射),這些特殊的映射性質(zhì)可以重寫或增強由標志所指定的默認映射。


    指定為 ColPattern 的通用 XPath 模式也支持元屬性。




    MetaProperty


    是由 OPENXML 提供的元屬性之一。如果指定元屬性,則該列包含元屬性提供的信息。這些元屬性使您得以析取 XML 節(jié)點的信息(如相對位置、命名空間信息),以提供比文本化表示法更詳細的信息。



    TableName



    如果具有期望架構(gòu)的表已經(jīng)存在且不要求列模式,則為給定的表名(而不是 SchemaDeclaration)。



    通過使用 SchemaDeclaration 或者指定一個現(xiàn)有的 TableName,WITH 子句提供一種行集格式(根據(jù)需要還提供其它映射信息)。如果沒有指定可選的 WITH 子句,那么以 edge table 格式返回結(jié)果。邊緣表在單個表中表示 XML 文檔的細密結(jié)構(gòu)(例如,元素/特性名、文檔層次結(jié)構(gòu)、命名空間、PI 等)。



    下表描述邊緣表的結(jié)構(gòu)。
































































    列名數(shù)據(jù)類型描述
    idbigint是文檔節(jié)點的唯一 ID。

    根元素的 ID 值為 0。保留負 ID 值。


    parentidbigint標識節(jié)點的父節(jié)點。此 ID 所標識的父節(jié)點不一定是父元素,而是取決于此 ID 所標識節(jié)點的子節(jié)點的 NodeType。例如,如果節(jié)點是文本節(jié)點,則其父節(jié)點可能是特性節(jié)點。

    如果節(jié)點位于 XML 文檔的頂層,則其 ParentID 為 NULL。


    nodetypeint標識節(jié)點類型。是對應于 XML DOM 節(jié)點類型編號的整數(shù)(有關節(jié)點信息,請參見 DOM)。

    三種節(jié)點類型是:



    1 = 元素節(jié)點

    2 = 特性節(jié)點

    3 = 文本節(jié)點


    localnamenvarchar給出元素或特性的本地名稱。如果 DOM 對象沒有名稱則為 NULL。
    prefixnvarchar是節(jié)點名稱的命名空間前綴。
    namespaceurinvarchar是節(jié)點的命名空間 URI。如果值是 NULL,則命名空間不存在。
    datatypenvarchar是元素或特性行的實際數(shù)據(jù)類型,否則是 NULL。從內(nèi)嵌 DTD 中或從內(nèi)嵌架構(gòu)中推斷數(shù)據(jù)類型。
    prevbigint是前一個兄弟元素的 XML ID。如果前面沒有兄弟元素則為 NULL。
    textntext包含文本格式的特性值或元素內(nèi)容(如果邊緣表項不需要值則為 NULL)。



    示例


    A.使用帶有 OPENXML 的 SELECT 語句。


    下面的示例使用 sp_xml_preparedocument 創(chuàng)建 XML 圖像的內(nèi)部表示。然后對 XML 文檔的內(nèi)部表示法執(zhí)行使用 OPENXML 行集提供程序的 SELECT 語句。



    flag 值設置為 1,表示以特性為中心的映射。因此,XML 特性映射到行集中的列。指定為 /ROOT/Customersrowpattern 標識要處理的 <Customers> 節(jié)點。



    沒有指定可選的 colpattern(列模式),因為列名和 XML 特性名稱匹配。



    OPENXML 行集提供程序創(chuàng)建了一個雙列行集(CustomerID ContactName),SELECT 語句從該行集中檢索必要的列(在本例中檢索所有的列)。



    DECLARE @idoc int
    DECLARE @doc varchar(1000)
    SET @doc ='
    <ROOT>
    <Customer CustomerID="VINET" ContactName="Paul Henriot">
      <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
        <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
        <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
      </Order>
    </Customer>
    <Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
      <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
        <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
      </Order>
    </Customer>
    </ROOT>'
    --Create an internal representation of the XML document.
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    -- Execute a SELECT statement that uses the OPENXML rowset provider.
    SELECT   *
    FROM     OPENXML (@idoc, '/ROOT/Customer',1)
            WITH (CustomerID varchar(10),
                ContactName varchar(20))


    下面是結(jié)果集:



    CustomerID ContactName          
    ---------- --------------------
    VINET     Paul Henriot
    LILAS     Carlos Gonzlez


    如果將 flags 設置為 2(表示以元素為中心的映射)并執(zhí)行相同的 SELECT 語句,由于 <Customers> 元素沒有任何子元素,則對于 XML 文檔中兩個 Customer 的 CustomerIDContactName 的值都作為 NULL 返回。



    下面是結(jié)果集:



    CustomerID ContactName
    ---------- -----------
    NULL     NULL
    NULL     NULL


    B. 為列和 XML 特性之間的映射指定 ColPattern


    下面的查詢從 XML 文檔返回客戶 ID、訂單日期、產(chǎn)品 ID 和數(shù)量等特性。rowpattern 標識 <OrderDetail> 元素。ProductIDQuantity 是 <OrderDetails> 元素的特性。而 CustomerIDOrderDate 是父元素 (<Orders>) 的特性。



    指定可選的 ColPattern,表示:


    • 行集中的 OrderIDCustomerIDOrderDate 列映射到 XML 文檔中 rowpattern 所標識節(jié)點的父節(jié)點的特性。



    • 行集中的 ProdID 列映射到 ProductID 特性,而行集中的 Qty 列映射到 rowpattern 所標識節(jié)點的 Quantity 特性。



    盡管以元素為中心的映射由 flag 參數(shù)指定,但 ColPattern 中指定的映射重寫該映射。



    declare @idoc int
    declare @doc varchar(1000)
    set @doc ='
    <ROOT>
    <Customer CustomerID="VINET" ContactName="Paul Henriot">
      <Order OrderID="10248" CustomerID="VINET" EmployeeID="5"
          OrderDate="1996-07-04T00:00:00">
        <OrderDetail ProductID="11" Quantity="12"/>
        <OrderDetail ProductID="42" Quantity="10"/>
      </Order>
    </Customer>
    <Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
      <Order OrderID="10283" CustomerID="LILAS" EmployeeID="3"
          OrderDate="1996-08-16T00:00:00">
        <OrderDetail ProductID="72" Quantity="3"/>
      </Order>
    </Customer>
    </ROOT>'
    --Create an internal representation of the XML document.
    exec sp_xml_preparedocument @idoc OUTPUT, @doc
    -- SELECT stmt using OPENXML rowset provider
    SELECT *
    FROM   OPENXML (@idoc, '/ROOT/Customer/Order/OrderDetail',2)
          WITH (OrderID     int       '../@OrderID',
              CustomerID varchar(10) '../@CustomerID',
              OrderDate   datetime   '../@OrderDate',
              ProdID     int       '@ProductID',
              Qty       int       '@Quantity')


    結(jié)果如下:



    OrderID CustomerID           OrderDate                 ProdID    Qty



    ------------------------------------------------------------------------



    10248      VINET       1996-07-04 00:00:00.000   11      12
    10248     VINET     1996-07-04 00:00:00.000   42     10
    10283     LILAS     1996-08-16 00:00:00.000   72     3


    C. 獲得邊緣表格式的結(jié)果


    在下例中,在 OPENXML 語句中未指定 WITH 子句。因此,OPENXML 所生成的行集具有邊緣表格式。SELECT 語句返回邊緣表中的所有列。



    下例中的示例 XML 文檔由 <Customer>、<Order> 和 <Order_0020_Details> 元素組成。



    首先調(diào)用 sp_xml_preparedocument 以獲得文檔句柄。此文檔句柄傳遞到 OPENXML。



    在 OPENXML 語句中


    • rowpattern (/ROOT/Customer) 標識要處理的 <Customer> 節(jié)點。



    • 未提供 WITH 子句。因此 OPENXML 以邊緣表格式返回行集。



    最后 SELECT 語句檢索邊緣表中的所有列。



    declare @idoc int
    declare @doc varchar(1000)
    set @doc ='
    <ROOT>
    <Customers CustomerID="VINET" ContactName="Paul Henriot">
      <Orders CustomerID="VINET" EmployeeID="5" OrderDate=
          "1996-07-04T00:00:00">
        <Order_x0020_Details OrderID="10248" ProductID="11" Quantity="12"/>
        <Order_x0020_Details OrderID="10248" ProductID="42" Quantity="10"/>
      </Orders>
    </Customers>
    <Customers CustomerID="LILAS" ContactName="Carlos Gonzlez">
      <Orders CustomerID="LILAS" EmployeeID="3" OrderDate=
          "1996-08-16T00:00:00">
        <Order_x0020_Details OrderID="10283" ProductID="72" Quantity="3"/>
      </Orders>
    </Customers>
    </ROOT>'
    --Create an internal representation of the XML document.
    exec sp_xml_preparedocument @idoc OUTPUT, @doc
    -- SELECT statement using OPENXML rowset provider
    SELECT   *
    FROM     OPENXML (@idoc, '/ROOT/Customers')
    EXEC sp_xml_removedocument @idoc


    結(jié)果作為邊緣表返回。



    相關文章
    本頁查看次數(shù):