我有一个具有70K记录的表,其中有一个列XMLMetadata
-该列包含所有70k的xml数据。
我需要一种从xml列中为所有70K记录增加一项的方法。我需要从全部70k中提取的商品名称为<Item Name="DocTitle" Type="String">
。
有没有办法我可以轻松拉动它?
<Metadata>
<Item Name="ID" Type="String">1364416</Item>
<Item Name="Name" Type="String">website</Item>
<Item Name="Type" Type="String">WebContent</Item>
<Item Name="Title" Type="String">Close Out Letter 11/1/17</Item>
<Item Name="Author" Type="String">Seba</Item>
....
</Metadata>
答案 0 :(得分:1)
尝试此查询
SELECT
XMLMetadata.value('(/Metadata/node())[1]', 'nvarchar(max)') as ID,
XMLMetadata.value('(/Metadata/node())[2]', 'nvarchar(max)') as Name,
XMLMetadata.value('(/Metadata/node())[3]', 'nvarchar(max)') as Type,
XMLMetadata.value('(/Metadata/node())[4]', 'nvarchar(max)') as Title,
XMLMetadata.value('(/Metadata/node())[5]', 'nvarchar(max)') as Author
FROM [myTable]
答案 1 :(得分:1)
如果要获取具有名称,类型和值的所有项,则可以使用以下内容:
SELECT
ItemName = XC.value('(@Name)', 'varchar(20)'),
ItemType = XC.value('(@Type)', 'varchar(20)'),
ItemValue = XC.value('(.)', 'varchar(50)')
FROM
dbo.YourTableNameHere
CROSS APPLY
XmlMetadata.nodes('/Metadata/Item') AS XT(XC)
,如果您只想基于Name
属性获得一个值,则可以在此处使用以下代码:
SELECT
ItemValue = XmlMetadata.value('(/Metadata/Item[@Name="Title"]/text())[1]', 'varchar(50)')
FROM
dbo.YourTableNameHere