• XML Data Type Methods(一)


    XML Data Type Methods(一)
    /*XML Data Type Methods:
    1.The query('XQuery') method retrieves(vt.检索,重新得到) a subset of untyped XML from the target XML instance
     
    2.The value('XQuery',dataType) method returns a scalar value(标量值) from the targeted XML document.
        The returned value is converted to the data type you specify when you call the method.
     
    3.The exist('XQuery') method lets you test for the existence of an element or one of its values
     
    4.The nodes('XQuery') method returns what is essentially a table that includes one column. 
        That means you should use the method only in those parts of a statement that can handle rowset views, such as the FROM clause. 
        It also means that, when you call the nodes() method, you must assign a table alias and column alias to the rowset view returned by the method
    5.The modify('XQuery') method lets you update that data
    */
     
    DECLARE @StoresTable  TABLE
    (
      StoreID INT IDENTITY(1,1) PRIMARY KEY,
      Survey_untyped XML,
      Survey_typed XML
    )
     
     INSERT INTO @StoresTable(Survey_untyped,Survey_typed)
     VALUES
     (
      '<UnifiedRequest> 
      <CommonInfo>
        <Version>1.14</Version>
        <Username>EC</Username>
      </CommonInfo>
      <OrderInfo>
        <CompanyCode>1003</CompanyCode>
        <PayTermsCode>024</PayTermsCode>
      </OrderInfo>
    </UnifiedRequest>',
    '<UnifiedRequest 
       xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns="http://tempuri.org/UnifiedRequest.xsd">
      <CommonInfo>
        <Version>1.14</Version>
        <Username>EC</Username>
      </CommonInfo>
      <OrderInfo>
        <CompanyCode>1003</CompanyCode>
        <PayTermsCode>024</PayTermsCode>
      </OrderInfo>
    </UnifiedRequest>'
    )
     
    --1.UntypedColumn 
    --1.1 query(xpathParameter) method
    SELECT
      Survey_untyped.query('/UnifiedRequest/OrderInfo') AS Info_typed
    FROM
      @StoresTable
    /*Result:
    <OrderInfo>
      <CompanyCode>1003</CompanyCode>
      <PayTermsCode>024</PayTermsCode>
    </OrderInfo>
    */
    --1.2 value(xpathParameter) method
    SELECT
      Survey_untyped.value('(/UnifiedRequest/OrderInfo/CompanyCode/text())[1]','INT') AS CompanyCode
    FROM
      @StoresTable
     
    --1.3 exist(xpathParameter) method
    SELECT TOP(1)
      CASE
        WHEN Survey_untyped.exist('/UnifiedRequest/OrderInfo/CompanyCode/text()')=1 THEN 'Found'
        ELSE 'Not Found'
      END
    FROM
      @StoresTable
     
    --1.4 nodes(xpathParameter) method
    DECLARE @bikes XML
    SET @bikes =
      '<Products>
        <Product>Mountain</Product>
        <Product>Road</Product>
       </Products>'
    SELECT
      Category.query('./text()') AS BikeTypes1,--return a subset of xml
      Category.value('(./text())[1]','VARCHAR(20)') AS BikeTypes2--return string
    FROM
      @bikes.nodes('/Products/Product')
        AS Bike(Category);
    /*Result
        BikeTypes1 BikeTypes2
        ---------------------------
        Mountain    Mountain
        Road        Road
    */
     
     
     
    --2.TypedColumn which contains namespace
    --2.1 query(xpathParameter) method
    ;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org/UnifiedRequest.xsd') 
    SELECT
      Survey_typed.query('/UnifiedRequest/OrderInfo') AS Info_typed
    FROM
      @StoresTable
    /*Result:
    <p1:OrderInfo xmlns:p1="http://tempuri.org/UnifiedRequest.xsd">
      <p1:CompanyCode>1003</p1:CompanyCode>
      <p1:PayTermsCode>024</p1:PayTermsCode>
    </p1:OrderInfo>
    */
     
    ;WITH XMLNAMESPACES('http://tempuri.org/UnifiedRequest.xsd' AS UFD) 
    SELECT
      Survey_typed.query('/UFD:UnifiedRequest/UFD:OrderInfo') AS Info_typed
    FROM
      @StoresTable
    /*Result:
    <UFD:OrderInfo xmlns:UFD="http://tempuri.org/UnifiedRequest.xsd">
      <UFD:CompanyCode>1003</UFD:CompanyCode>
      <UFD:PayTermsCode>024</UFD:PayTermsCode>
    </UFD:OrderInfo>
    */
     
    SELECT
      Survey_typed.query('declare namespace UFR="http://tempuri.org/UnifiedRequest.xsd";
        /UFR:UnifiedRequest/UFR:OrderInfo') AS Info_typed
    FROM
      @StoresTable;
    /*Result:
    <UFR:OrderInfo xmlns:UFR="http://tempuri.org/UnifiedRequest.xsd">
      <UFR:CompanyCode>1003</UFR:CompanyCode>
      <UFR:PayTermsCode>024</UFR:PayTermsCode>
    </UFR:OrderInfo>
    */
     
    ;WITH XMLNAMESPACES('http://tempuri.org/UnifiedRequest.xsd' AS UFD) 
    SELECT
      Survey_typed.query('/UFD:UnifiedRequest') AS Info_typed
    FROM
      @StoresTable;
    /*Result:
    <UnifiedRequest xmlns="http://tempuri.org/UnifiedRequest.xsd" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <CommonInfo>
        <Version>1.14</Version>
        <Username>EC</Username>
      </CommonInfo>
      <OrderInfo>
        <CompanyCode>1003</CompanyCode>
        <PayTermsCode>024</PayTermsCode>
      </OrderInfo>
    </UnifiedRequest>
    */
     
     
    --2.2 value(xpathParameter,dataType) method
    ;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org/UnifiedRequest.xsd') 
    SELECT
      --Result:1003
      Survey_typed.value('(/UnifiedRequest/OrderInfo/CompanyCode/text())[1]','INT') AS CompanyCode
    FROM
      @StoresTable
     
    SELECT
      --Result:1003
      Survey_typed.value('declare namespace UFD="http://tempuri.org/UnifiedRequest.xsd";
    (/UFD:UnifiedRequest/UFD:OrderInfo/UFD:CompanyCode/text())[1]','INT') AS CompanyCode
    FROM
      @StoresTable
     
    --2.3 exist(xpathParameter) method
    ;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org/UnifiedRequest.xsd') 
    SELECT TOP(1)
      CASE
        WHEN Survey_typed.exist('/UnifiedRequest/OrderInfo/CompanyCode/text()')=1 THEN 'Found'
        ELSE 'Not Found'
      END
     
    FROM
      @StoresTable
     
    --2.4 nodes(xpathParameter) method
    DECLARE @bikes2 XML
    SET @bikes2 =
      '<Products xmlns="http://tempuri.org/UnifiedRequest.xsd">
        <Product>Mountain</Product>
        <Product>Road</Product>
       </Products>'
     
    ;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org/UnifiedRequest.xsd') 
    SELECT
      Category.query('./text()') AS BikeTypes1,--return a subset of xml
      Category.value('(./text())[1]','VARCHAR(20)') AS BikeTypes2--return string
    FROM
      @bikes2.nodes('/Products/Product') AS Bike(Category);
    /*Result
        BikeTypes1 BikeTypes2
        ---------------------------
        Mountain    Mountain
        Road        Road
    */
  • 相关阅读:
    全局变量与全局静态变量的区别:
    Python模块学习 ---- datetime
    python sys.path用法
    过来人谈《去360还是留在百度?》
    [编码问题] Python错误: SyntaxError: Non-ASCII character
    E513: write error, conversion failed (make 'fenc' empty to override)"解决办法
    巴真的点评
    set之hashset与TreeSet、LinkedHashSet实现原理
    list之linedlist与arraylist实现原理
    统一会话与单点登录
  • 原文地址:https://www.cnblogs.com/jeriffe/p/3491791.html
Copyright © 2020-2023  润新知