将每个 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

将 XML 数据插入到具有多个节点的 SQL 表中

使用单个过程将多个 xml 数据动态插入到 sql server 表中

如何为xml节点sql server选择每个值

SQL:使用 modify 函数迭代 xml 节点或如何递归地插入或修改节点