2014-05-15 45 views
-1

我有以下的列樞紐和合並列存儲過程

Col1(bigint) | Col2(datetime)| Col3(nvarchar(100))| Col4(xml) 

第四列的表是它看起來像下面一個xml,它可以包含任意數量的字段

<Fields> 
    <Field1>10</Field1> 
    <Field2>11</Field2> 
    <Field3>10</Field3> 
    <Field4>11</Field4> 
</Fields> 

我需要從表中查詢多行。我創建的存儲的過程,其獲取2個參數

參數1:@query(類型的xml

<Rowset> 
    <Row> 
    <Col1>2014051</Col1> 
    <Col2>2014-05-14T13:01:03.1426856+05:30</Col2> 
    <Col3>Source1</Col3> 
    </Row> 
    <Row> 
    <Col1>2014051</Col1> 
    <Col2>2014-05-14T13:01:03.1426856+05:30</Col2> 
    <Col3>Source2</Col3> 
    </Row> 
</Rowset> 

參數2:@Fields

Field1,Field2,Field3,Field4 

(分隔的字符串逗號的類型)我期待一個輸出格式如下

Col1  | Col2 | Col3 | Field1 | Field2 | Field3 | Field4 
----------------------------------------------------------------- 
2014051092|2014-05-14|Source1| 10 | 21 | 12 | 43 
2014051093|2014-05-14|Source1| 11 | 22 | 23 | 53 

我從存儲過程中的第一個參數創建了一個表。

INSERT INTO #TempPricing      
(                    
    Col1, 
    Col2, 
    Col3             
)                    
SELECT                    
    Col1, 
    Col2, 
    Col3        
    FROM OPENXML(@handle, '/Rowset/Row', 2)                     
WITH                    
(               
    Col1 bigint, 
    Col2 datetime, 
    Col3 varchar(50)  
) 

如何在分割後旋轉第二個參數,將它與上面的表合併並獲取數據?

編輯 輸出也可以是以下格式

Col1  | Col2 | Col3 | Fields 
-------------------------------------- 
2014051092|2014-05-14|Source1|<Fields><Field1>10</Field1><Field1>11</Field1></Fields> 
2014051093|2014-05-14|Source1|<Fields><Field1>20</Field1><Field1>21</Field1></Fields> 

因此上述任何形式將工作

+0

我能夠使用指令從問題http://stackoverflow.com/questions/23681510/fetch-queried-xml-nodes-from-a-column-in-sql-server實現上述-2005 – puneet

回答

0

讓我們嘗試下面的腳本,它可以幫助你。

declare @String varchar(max), @Result varchar(max) 

select @String= COALESCE(@String+',', '')+ QUOTENAME(Col1) 
FROM (
select distinct Col1 from TableA A Inner Join dbo.Tab C VS on A.AttributeID =VS.AttributeId)AS B 
set @Result =' 
with pivotData AS 
(
select distinct P.Col1, PA.col1,A.Col1,PA.col2 from Tab3 PA join Attribute A 
on A.AttributeID=PA.AttributeID join Product P on P.ProductId=PA.ProductId 
) 
select Col1, Col2, 
'[email protected]+' from pivotData 
pivot(
Max(col2) for 
Col1in('[email protected]+') 
)as PR order by col3 desc' 

exec (@Result)