如何在表格中存储XML数据列表

时间:2018-08-01 03:52:33

标签: sql-server tsql

我正在处理一个脚本,该脚本将允许我将xml数据保存在表中。这将用于与也包含xml数据的其他表进行比较。 到目前为止,我已经为简单的节点标签取得了成功,但是在尝试存储列表中的数据时遇到了问题。

XML数据如下:Sample XML Data

我的查询是这样的: XML Query display

我能够将'TypeCode'作为主节点,但是对于值,它始终显示为空白。我不确定如何处理XML列表。

我在想只要能保存数据 ''
”作为“值”列中的文本,那么我可以找到另一种解析它的方法,并以更好的方式将其显示为另一个查询。

感谢任何帮助:D谢谢!

2 个答案:

答案 0 :(得分:0)

美好的一天,

SQL Server包含特殊的数据类型XML,您应该使用它来存储XML数据。

declare @MyXML XML = '
<codes>
    <Type>
        <Item key="1" />
    </Type>
</codes>
'
select @MyXML

以下是使用表格的示例:

DROP TABLE IF eXISTS T;
CREATE TABLE T(MyXML XML)
GO
INSERT T(MyXML) values ('
<codes>
    <Type>
        <Item key="1" />
    </Type>
</codes>
')
SELECT * FROM T
GO

有关更多信息,请参见以下文档: XML Data Type and Columns (SQL Server)

答案 1 :(得分:0)

关于下一个问题:请勿发布图片。我必须在此输入...请提供消耗性数据,最好作为独立示例来重现您的问题。

DECLARE @xml XML=
'<Codes>
<TypeCodes type="list">
<item key="A" text="A1"/>
<item key="C" text="C1"/>
</TypeCodes>
</Codes>';

--the Xml "as is" 
SELECT @xml;

--fetch one value with XQuery
SELECT @xml.value('(/Codes/TypeCodes/item[@key="A"]/@text)[1]','varchar(10)');

--fetch all items as list
SELECT @xml.value('(/Codes/TypeCodes/@type)[1]','varchar(10)') AS TypeCode_type
      ,i.value('@key','varchar(10)') AS item_key
      ,i.value('@text','varchar(10)') AS item_text
FROM @xml.nodes('/Codes/TypeCodes/item') A(i);

签出