sql-server - 动态 xml 到 SQL Server 表

标签 sql-server xml

我有动态生成的 XML 文件

-----Example1-----
<items>
<param1>aaaa</param1>
<param2>bbbb</param2>
<param3>cccc</param3>
</items>
-----Example2-----
<items>
<test1>dddd</test1>
<test7>eeee</test7>
<john1>ffff</john1>
<john2>ffff</john2>
</items>

我想将此 xml 文件转换为这样的表

-----SQL TABLE for Example1-----
Name     Value
param1   aaaa
param2   bbbb
param3   cccc
-----SQL TABLE for Example2-----
Name     Value
test1   dddd
test7   eeee
john1   ffff
john2   ffff

问题 - 每个 xml 文件中的项目 xml 标签名称都不同(如示例中所示) - 每个 xml 文件中的项目编号不同

大家有什么想法吗

我已经完成了 C# 中的 Update1 示例,但我需要在 T-SQL 中执行此操作:(

  public static void test()
    {

        string test = @"
        <items>
        <param1>aaaa</param1>
        <param2>bbbb</param2>
        <param3>cccc</param3>
        </items>
        ";

        XmlDocument newdoc = new XmlDocument();
        XmlNode root = newdoc.CreateElement("dataset");
        newdoc.AppendChild(root);
        XmlDocument doc = new XmlDocument();
        doc.InnerXml = test;
        XmlNodeList lst = doc.SelectNodes("//items/*"); 
        foreach (XmlNode item in lst)
        {
            Console.WriteLine(item.Name + ": " + item.InnerXml);
        }
    }

结果 参数1:aaaa 参数2:bbbb 参数3:cccc

UPDATE2 已部分解决 我只需要获取 xml 标签名称

declare @foo xml
set @foo = N'
<items>
       <param1>aaaa</param1>
       <param2>bbbb</param2>
       <param3>cccc</param3>
</items>'

SELECT
'' as name,  --?? no idea how to get names param1,param2,param3
bar.value('./.','VARCHAR(14)')  as value 
FROM
@foo.nodes('/items/*') AS foo(bar)   

最佳答案

创建 XSLT 转换以将 XML 数据转换为一组 INSERT INTO 语句相对容易。然后你就可以执行这些语句。该方法的有用程度取决于您需要导入数据的量和速度。

如果您还没有表,您甚至可以使用 XSLT 来执行 CREATE TABLE DDL。

更新: 使用您的代码,您可以使用 local-name() 函数:

declare @foo xml
set @foo = N'
<items>
       <param1>aaaa</param1>
       <param2>bbbb</param2>
       <param3>cccc</param3>
</items>'

SELECT
bar.value('local-name(.)','VARCHAR(14)') as name,  
bar.value('./.','VARCHAR(14)')  as value 
FROM
@foo.nodes('/items/*') AS foo(bar) 

关于sql-server - 动态 xml 到 SQL Server 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2218652/

相关文章:

xml - XPath 查询通过某种实现来选择元素

sql - 选择表中的前 1 组

c# - 如何使用 Dapper.NET 将 C# 列表插入数据库

SQL Server ALTER 字段 NOT NULL 需要永远

c# - 是否可以在文件中保存有关 mdf 文件的元数据?

mysql - Perl 和 XPath : missing entries in database table

sql-server - 如何在 SQL Server 2008 中的单个列上存储项目列表

jquery - 跨域 JSONP XML 响应

SQL 服务器 2005 : How to perform a split on a string

php - 在 PHP 中使用 XPath 提取 XML