4 回答

TA貢獻1963條經(jīng)驗 獲得超6個贊
考慮到XML數(shù)據(jù)來自表'table'并存儲在'field'列中:使用XML方法,使用提取值,使用提取xml.value()項目節(jié)點xml.nodes(),使用CROSS APPLY聯(lián)接:
SELECT
p.value('(./firstName)[1]', 'VARCHAR(8000)') AS firstName,
p.value('(./lastName)[1]', 'VARCHAR(8000)') AS lastName
FROM table
CROSS APPLY field.nodes('/person') t(p)
如果每個字段僅包含一個元素“ person” nodes(),cross apply則可以放棄。如果XML是變量,則選擇FROM @variable.nodes(...),則不需要cross apply。

TA貢獻1825條經(jīng)驗 獲得超4個贊
這篇文章對解決我的XML格式略有不同的問題很有幫助...我的XML包含一個鍵列表,例如以下示例,我將XML存儲在名為DeleteBatch的表的SourceKeys列中:
<k>1</k>
<k>2</k>
<k>3</k>
創(chuàng)建表并用一些數(shù)據(jù)填充它:
CREATE TABLE dbo.DeleteBatch (
ExecutionKey INT PRIMARY KEY,
SourceKeys XML)
INSERT INTO dbo.DeleteBatch ( ExecutionKey, SourceKeys )
SELECT 1,
(CAST('<k>1</k><k>2</k><k>3</k>' AS XML))
INSERT INTO dbo.DeleteBatch ( ExecutionKey, SourceKeys )
SELECT 2,
(CAST('<k>100</k><k>101</k>' AS XML))
這是從XML中選擇鍵的SQL:
SELECT ExecutionKey, p.value('.', 'int') AS [Key]
FROM dbo.DeleteBatch
CROSS APPLY SourceKeys.nodes('/k') t(p)
這是查詢結果...
ExecutionKey鍵
1 1
1 2
1 3
2 100
2 101

TA貢獻1725條經(jīng)驗 獲得超8個贊
這可能會回答您的問題:
select cast(xmlField as xml) xmlField into tmp from (
select '<person><firstName>Jon</firstName><lastName>Johnson</lastName></person>' xmlField
union select '<person><firstName>Kathy</firstName><lastName>Carter</lastName></person>'
union select '<person><firstName>Bob</firstName><lastName>Burns</lastName></person>'
) tb
SELECT
xmlField.value('(person/firstName)[1]', 'nvarchar(max)') as FirstName
,xmlField.value('(person/lastName)[1]', 'nvarchar(max)') as LastName
FROM tmp
drop table tmp
添加回答
舉報