SQL XML类型的查询

 


查询XML节点 value:通过nodes 指定到节点通过Value属性取出值
Declare   @Xml  xml
set   @Xml = ' <Employee><ID>1</ID><ID>2</ID></Employee> '

SELECT   ID.value( ' . ' , ' Nvarchar(500) ' as  EmployeeID
    
FROM   @Xml .nodes( ' Employee/ID ' ) Employee(ID)            
    
查询 XML节点的属性:            
Declare   @Xml  xml
set   @Xml = ' <Employee><EmployeeID ID="1" /><EmployeeID ID="2" /><EmployeeID ID="3" /></Employee> '
                
SELECT   EmployeeID.value( ' ./@ID ' , ' Nvarchar(500) ' as  ReportColumnID
                
                
FROM   @Xml .nodes( ' /Employee/EmployeeID '
                X(EmployeeID)

查询XML 多节点的值,可以通过子查询实现:
Declare   @Xml  xml
Set   @Xml   =   '
<X>
  <T><ID>1</ID><NAME>A1</NAME></T>
  <T><ID>2</ID><NAME>B2</NAME></T>
  <T><ID>3</ID><NAME>C3</NAME></T>
</X>
'
SELECT   ID.value( ' . ' ' NVARCHAR(100) ' As  ID,NAME.value( ' . ' , ' NVARCHAR(100) ' As  NAME
FROM  
(
    
Select   
        T.C.query(
' ID ' As  ID, 
        T.C.query(
' NAME ' As  NAME
    
From  
        
@Xml .nodes( ' /X/T ' As  T(C)
)BT



OPENXML 查询方式:

DECLARE   @idoc   int
DECLARE   @doc   varchar ( 1000 )
SET   @doc   = '
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot" />
</ROOT>
'
-- -创建文档内部格式
EXEC  sp_xml_preparedocument  @idoc  OUTPUT,  @doc

SELECT      *
FROM        OPENXML ( @idoc ' /ROOT/Customer ' , 1 )
            
WITH  (CustomerID   varchar ( 10 ),
                  ContactName 
varchar ( 20 ))


OPENXML 查询方式:

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>
</ROOT>
'
-- -创建文档内部格式
EXEC  sp_xml_preparedocument  @idoc  OUTPUT,  @doc

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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值