[英]Split XML variable, join and insert into a temp table XML column
我有一個包含以下XML
的XML
變量:
<Fruits>
<Fruit>
<Type>Apple</Type>
<FruitID>1</FruitID>
<MoreInfo>
<Info Name="GreenApples" Value="3900" />
</MoreInfo>
</Fruit>
<Fruit>
<Type>Orange</Type>
<FruitID>2</FruitID>
<MoreInfo>
<Info Name="Oranges" Value="1100" />
</MoreInfo>
</Fruit>
</Fruits>
我正在嘗試創建一個看起來像這樣的臨時表:
CREATE TABLE #XmlTable (
email nvarchar(100),
xmlNode XML
)
我的目標是:
email | xmlNode
one@email.com | <Fruit><Type>Apple</Type><FruitID>1</FruitID><MoreInfo><Info Name="GreenApples" Value="3900" /></MoreInfo></Fruit>
two@email.com | <Fruit><Type>Orange</Type><FruitID>2</FruitID><MoreInfo><Info Name="Oranges" Value="1100" /></MoreInfo></Fruit>
問題是當我拆分它並將其插入表中時,我不知道如何將其轉換為XML。
我有以下SQL正在完成這項工作,但我如何將其轉換為XML?
INSERT INTO #XmlTable
SELECT EOR.email,
xmlNode.Col.value('.', 'nvarchar(max)') AS XML
FROM @outputXML.nodes('/Fruits') xmlNode(Col)
CROSS APPLY @outputXML.nodes('/Fruits/Fruit/FruitID') xmlValue(i)
INNER JOIN #EmailsOfReceivers EOR
ON EOR.ID= xmlValue.i.value('.','nvarchar(max)')
它工作正常,但當然xmlNode列沒有XML標記。
這是一種可能的方式:
INSERT INTO #XmlTable
SELECT EOR.email,
fruit.x.query('.') AS XML
FROM @outputXML.nodes('/Fruits/Fruit') fruit(x)
INNER JOIN #EmailsOfReceivers EOR
ON EOR.ID = fruit.x.value('FruitID[1]','nvarchar(max)')
基本上,在<Fruit>
節點上粉碎XML,然后您可以使用query()
而不是value()
來獲取XML標記。
旁注:如果可能的話,我FruitID
作為int
而不是nvarchar(max)
返回。
您可以將.query('.')
用於xml列:
DECLARE @outputXML XML
SELECT @outputXML = '<Fruits>
<Fruit>
<Type>Apple</Type>
<FruitID>1</FruitID>
<MoreInfo>
<Info Name="GreenApples" Value="3900" />
</MoreInfo>
</Fruit>
<Fruit>
<Type>Orange</Type>
<FruitID>2</FruitID>
<MoreInfo>
<Info Name="Oranges" Value="1100" />
</MoreInfo>
</Fruit>
</Fruits>'
INSERT INTO #XmlTable
SELECT EOR.email,
xmlNode.Col.query('.') AS MyXML
FROM @outputXML.nodes('/Fruits/Fruit') xmlNode(Col)
INNER JOIN #EmailsOfReceivers EOR
ON EOR.ID = xmlNode.Col.value('FruitID[1]','nvarchar(max)')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.