Tired, Come in and take a rest

Welcome to my blog,find what you like and leave your message here ,Let's share the information together.Thanks
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SQL数据库中的XML应用

Posted on 2011-04-08 00:14  我是你的小可爱  阅读(1478)  评论(0编辑  收藏  举报

 下面我介绍一种通过XML技术在SQL SERVER2005中进行合併行轉列的 功能

DECLARE @idoc int
DECLARE @doc xml

SET @doc ='
<condition>

<State csif_cStateID="S001"/>
<State csif_cStateID="S002"/>
<State csif_cStateID="S003"/>

</condition>
'

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

SELECT    csif_cStateID 
FROM       OPENXML (@idoc, '/condition/State')
WITH (csif_cStateID  varchar(15))
EXEC sp_xml_removedocument @idoc

DECLARE @docHandle int
declare @xmlDocument nvarchar(max) -- or xml type
set @xmlDocument = N'

<Item>
    <SoNo>工程單號</SoNo>
    <ItemID>產品ID</ItemID>
    <EditionCD>版本CD</EditionCD>
    <ImprintCD>出版社CD</ImprintCD>
    <ProductName>產品名稱</ProductName>
    <EditionName>版本</EditionName>
    <ImprintName>出版社</ImprintName>
    <PackType>袋型</PackType>
    <ExFactory>最早走貨期</ExFactory>
    <OrderQty>訂單數量</OrderQty>
    <PlanProductQty>小排期排期數</PlanProductQty>
  </Item>

'
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
-- Use OPENXML to provide rowset consisting of customer data.
--INSERT Customers
--SELECT *
--FROM OPENXML(@docHandle, N'ROOT/Customers/Orders')
--  WITH Customers
-- Use OPENXML to provide rowset consisting of order data.
--INSERT Orders
--SELECT *
--FROM OPENXML(@docHandle, N'//Orders')
--  WITH Orders
-- Using OPENXML in a SELECT statement.
SELECT *
FROM OPENXML(@docHandle, N'/Item',2)
WITH (SoNo nchar(20) , ItemID nvarchar(10),EditionCD nvarchar(10),ImprintCD nvarchar(10))
EXEC sp_xml_removedocument @docHandle
--EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
--
--SELECT    reqno 
--FROM       OPENXML (@idoc, '/root/CourierID',1)
--WITH (Reqno  varchar(15))

----合併行轉列
from (select distinct rcpi_cCartonContentID,rcpi_iCartonProductID from #tempOldRcpi ) a
Outer apply
( select stuff( replace( replace (
(select distinct isnull(so,'''') as so  from #tempOldRcpi b
where  b.rcpi_iCartonProductID=a.rcpi_iCartonProductID
 for xml auto),''<b so="'',''\''),''"/>'',''''),1,1,'''')
 as So

) as c'