我有动态生成的 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/