当前位置:编程学习 > XML/UML >>

XML常用方法

Examples:

 

--1 、表連接條件查詢

 

DECLARE    @names   XML  

  SET    @names   =    <root> 

  <row   id="1">aa</row> 

  <row   id="2">bb</row> 

  </root>  

  

SELECT    

    A. id,  

    name    =    @names. value( (/root/row[@id=sql:column("A.id")])[1] ,    varchar(10) )  

FROM (  

    SELECT    id   =    1   UNION    ALL  

    SELECT    id   =    2 

) A  

 

/*

id  name

1   aa

2   bb

*/

 

 

--2 、變量傳參

 

go

 

DECLARE    @a   XML  

SET    @a   =    <root> 

<row   id="1">aa</row> 

<row   id="2">bb</row> 

</root>  

 

DECLARE    @id   int  

SET    @id   =    2 

SELECT    @a. value( (/root/row[@id=sql:variable("@id")])[1] ,    varchar(10) )   

 

 

--3 、條件 exist 用法

IF OBJECT_ID ( Tempdb..#T ) IS NOT NULL

    DROP TABLE #T

CREATE TABLE #T (

    ProductID          int primary key ,

    CatalogDescription xml )

Go

insert into #T values ( 1, <ProductDescription ProductID="1" ProductName="SomeName" /> )

go

 

SELECT ProductID,

     CatalogDescription. value( (/ProductDescription/@ProductName)[1] , varchar(40) ) as PName,

    t. CatalogDescription. exist( /ProductDescription[@ProductName="SomeName"] ) AS IsExists

FROM #T AS T

where t. CatalogDescription. exist( /ProductDescription[@ProductName="SomeName"] )= 1

/*

ProductID   PName   IsExists

1   SomeName    1

*/

GO

 

--4 、 XML 的 nodes+CROSS APPLY 應用

 

Declare @x XML

Set @x =

<RelOp NodeId="10" PhysicalOp="Index Seek" LogicalOp="Index Seek" >

      <OutputList>

        <ColumnReference Column="Bmk1010" />

        <ColumnReference Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" Column="DateModified" />

        <ColumnReference Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" Column="FID" />

      </OutputList>

<Object Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Index="[IX_Tab2_1]" Alias="[Tab2]" />

      <OutputList>

        <ColumnReference Column="Bmk1010" />

        <ColumnReference Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" Column="DateModified" />

        <ColumnReference Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" Column="FID" />

      </OutputList>

<Object Database="[DB1]" Schema="[dbo]" Table="[[Tab1]]" Index="[IX_Tab2_3]" Alias="[[Tab1]]" />

      <OutputList>

        <ColumnReference Column="Bmk1010" />

        <ColumnReference Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" Column="DateModified" />

        <ColumnReference Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" Column="FID" />

      </OutputList>

 

</RelOp>

<RelOp NodeId="12" >

      <OutputList>

        <ColumnReference Column="Bmk1010" />

        <ColumnReference Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" Column="DateModified" />

        <ColumnReference Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" Column="FID" />

      </OutputList>

 

<Object Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" />

      <OutputList>

        <ColumnReference Column="Bmk1010" />

        <ColumnReference Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" Column="DateModified" />

        <ColumnReference Database="[DB1]" Schema="[dbo]" Table="[Tab2]" Alias="[Tab2]" Column="FID" />

      </OutputList>

 

</RelOp>

select

    t. c. value( @Database , nvarchar(255) ) Databse

    , t. c. value( @Table , nvarchar(255) )     tbls

    , t. c. value( @Index , nvarchar(255) )     indxs  

from @x. nodes( //Object ) t( c)

/*

Databse tbls    indxs

[DB1]   [Tab2]  [IX_Tab2_1]

[DB1]   [[Tab1]]    [IX_Tab2_3]

[DB1]   [Tab2]  NULL

*/

 

Select

    u. d. value( @NodeId , nvarchar(255) ) NodeId

From @x. nodes( //RelOp ) u( d)

/*

10

12

*/

 

SELECT

    u. d. value( @NodeId , nvarchar(255) ) NodeId,

    t. c. value( @Database , nvarchar(255) ) Databse,

    t. c. value( @Table , nvarchar(255) ) tbls,

    t. c. value( @Index , nvarchar(255) ) indxs

FROM @x. nodes( RelOp ) u( d)

    CROSS APPLY u. d. nodes( Object ) t( c)

/*

 

NodeId  Databse tbls    indxs

10  [DB1]   [Tab2]  [IX_Tab2_1]

10  [DB1]   [[Tab1]]    [IX_Tab2_3]

12  [DB1]   [Tab2]  NULL

 

*/

 

--5 、 XML 的排序號

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,