将每个 xml 节点插入到 sql server 2008 表中
Posted
技术标签:
【中文标题】将每个 xml 节点插入到 sql server 2008 表中【英文标题】:insert each xml node to sql server 2008 table 【发布时间】:2019-05-09 00:24:47 【问题描述】:我的 xml 如下所示:
<Production>
<AIS_ID>ais150Dz</AIS_ID>
<WorkedOn>12-12-2017</WorkedOn>
<Status>Completed</Status>
</Production>
我想将它插入到如下所示的表格中
ID Field_Ident Value_Ident
1 AIS_ID ais150Dz
2 WorkedOn 12-12-2017
3 Status Completed
我找到了这样做的建议,但我必须在插入数据时手动声明列名,例如“/生产/AIS_ID”。我想让它动态化,不管 XML 中有多少节点。原因是,返回的xml不固定。
请有任何建议。
【问题讨论】:
为什么要这样做? SQL Server 有一个xml
类型。
我得到了字典形式的数据。要在数据库中插入所有值,我必须在 C# 中使用 for 循环。为避免这种情况,我已将字典转换为 xml 字符串,并将其传递给存储过程。现在我想插入每个节点及其值,如问题所示。
您可以在 VS 项目中使用创建数据上下文,然后您可以获取数据表并保存到数据库中。 datacontext 自动创建 c# 类和 SQL 表之间的类和映射接口。
【参考方案1】:
试试这个:
DECLARE @XML XML;
SET @XML = '<Production>
<AIS_ID>ais150Dz</AIS_ID>
<WorkedOn>12-12-2017</WorkedOn>
<Status>Completed</Status>
</Production>'
SELECT T.c.value('local-name(.)', 'VARCHAR(50)')
,T.c.value('(./node())[1]', 'VARCHAR(100)')
FROM @XML.nodes('Production/*')T(c);
【讨论】:
以上是关于将每个 xml 节点插入到 sql server 2008 表中的主要内容,如果未能解决你的问题,请参考以下文章
如何从XML *向SQL Server DATE字段*中插入NULL
将 XML 文档从 SQL SERVER 插入到 Oracle