你想你的問題減少到必要的,這是偉大的,但我必須承認,我不完全理解這個......我必須承認,我不喜歡實體 - 值對我懷疑,這種結構會使你快樂......
我的理解是你的問題:...被放置在選擇所有變量CUSTOM_DATA_ITEM下兄弟節點
有一個簡單的伎倆:在它們之間放置一個空的節點。這將告訴引擎完成當前元素並開始新元素。
以下是一些建議:
DECLARE @tbl TABLE ([Name] VARCHAR(100),[Address] VARCHAR(100),SomeNumber INT);
INSERT INTO @tbl VALUES
('John','John''s street',100)
,('Steve','Steve''s street',300);
SELECT 'Name' AS [CUSTOM_DATA_ITEM/DataItemName]
,[Name] AS [CUSTOM_DATA_ITEM/DataItemValue]
,''
,'Address' AS [CUSTOM_DATA_ITEM/DataItemName]
,[Address] AS [CUSTOM_DATA_ITEM/DataItemValue]
,''
,'SomeNumber' AS [CUSTOM_DATA_ITEM/DataItemName]
,SomeNumber AS [CUSTOM_DATA_ITEM/DataItemValue]
FROM @tbl
FOR XML PATH('DataRow'),ROOT('EXTENSION')
結果
<EXTENSION>
<DataRow>
<CUSTOM_DATA_ITEM>
<DataItemName>Name</DataItemName>
<DataItemValue>John</DataItemValue>
</CUSTOM_DATA_ITEM>
<CUSTOM_DATA_ITEM>
<DataItemName>Address</DataItemName>
<DataItemValue>John's street</DataItemValue>
</CUSTOM_DATA_ITEM>
<CUSTOM_DATA_ITEM>
<DataItemName>SomeNumber</DataItemName>
<DataItemValue>100</DataItemValue>
</CUSTOM_DATA_ITEM>
</DataRow>
<DataRow>
<CUSTOM_DATA_ITEM>
<DataItemName>Name</DataItemName>
<DataItemValue>Steve</DataItemValue>
</CUSTOM_DATA_ITEM>
<CUSTOM_DATA_ITEM>
<DataItemName>Address</DataItemName>
<DataItemValue>Steve's street</DataItemValue>
</CUSTOM_DATA_ITEM>
<CUSTOM_DATA_ITEM>
<DataItemName>SomeNumber</DataItemName>
<DataItemValue>300</DataItemValue>
</CUSTOM_DATA_ITEM>
</DataRow>
</EXTENSION>
我寧願把內容屬性爲元素,但是這是一個品味問題:
SELECT 'Name' AS [CUSTOM_DATA_ITEM/@DataItemName]
,[Name] AS [CUSTOM_DATA_ITEM/@DataItemValue]
,''
,'Address' AS [CUSTOM_DATA_ITEM/@DataItemName]
,[Address] AS [CUSTOM_DATA_ITEM/@DataItemValue]
,''
,'SomeNumber' AS [CUSTOM_DATA_ITEM/@DataItemName]
,SomeNumber AS [CUSTOM_DATA_ITEM/@DataItemValue]
FROM @tbl
FOR XML PATH('DataRow'),ROOT('EXTENSION')
結果
<EXTENSION>
<DataRow>
<CUSTOM_DATA_ITEM DataItemName="Name" DataItemValue="John" />
<CUSTOM_DATA_ITEM DataItemName="Address" DataItemValue="John's street" />
<CUSTOM_DATA_ITEM DataItemName="SomeNumber" DataItemValue="100" />
</DataRow>
<DataRow>
<CUSTOM_DATA_ITEM DataItemName="Name" DataItemValue="Steve" />
<CUSTOM_DATA_ITEM DataItemName="Address" DataItemValue="Steve's street" />
<CUSTOM_DATA_ITEM DataItemName="SomeNumber" DataItemValue="300" />
</DataRow>
</EXTENSION>
但是 - 說實話 - 我不會這麼做的。我把這個進退兩難的結構:
SELECT [Name]
,[Address]
,SomeNumber
FROM @tbl
FOR XML PATH('DataRow'),ROOT('EXTENSION')
結果
<EXTENSION>
<DataRow>
<Name>John</Name>
<Address>John's street</Address>
<SomeNumber>100</SomeNumber>
</DataRow>
<DataRow>
<Name>Steve</Name>
<Address>Steve's street</Address>
<SomeNumber>300</SomeNumber>
</DataRow>
</EXTENSION>
我喜歡你的第一個建議。我不知道你可以這樣做。然而,由於我有很多表格和名稱,它會變得非常混亂和混亂,很難區分哪一列與選擇對應。你知道我可以有一個循環來解決這個問題嗎? – DRockClimber
嗨@DRockClimber,很高興你喜歡它!因爲你是新來的,請允許我提一個提示:關於SO的一個原則是:*一個問題,一個問題*。在這裏你的問題是:*我怎樣才能獲得的元素分離,並不是所有的內父元素*您新的問題似乎是這樣的:?*?我怎樣才能得到一個表作爲鍵 - 值對的XML元素一般*請創建一個(減少到最小!)示例數據和預期輸出。新問題引起更多關注,您將很快得到幫助!在這裏放置一個鏈接,我也會在那裏彈出。 – Shnugo