说如果我有包含XML数据的单列的表 例如:
Details(Column Name in Table)
<emp>--row1 in that column
<Name>Alice</name>
<ID>1</ID>
</emp>
<emp>--row2 in that column
<Name>Bob</name>
<ID>2</ID>
</emp>
现在我需要从表中读取此列并将其插入到另一个包含与XML标记名称相同的列名的表中,即
Emp
Name ID
Alice 1
Bob 2
我尝试过OPENXML,XQUERY等。没有什么似乎可以逐列读取并插入该行。你能指导我吗?
答案 0 :(得分:0)
我认为你可以做到这一点。
declare @str_xml xml --- xml data from your column table
SELECT
[Table].[Column].value('name[1]', 'varchar(100)') as ' Name ',
[Table].[Column].value('ID[1]', 'varchar(20)') as ' ID '
FROM @str_xml.nodes('/ emp') as [Table]([Column])
Note :
name[1] = name on this must be same with tag <name> not <Name>
当您可以从xml字符串创建输出表时,可以使用它来插入另一个表。
答案 1 :(得分:0)
带有原始表的xml字段上的CROSS APPLY
应该为您提供插入目标表所需的输出。
DECLARE @Source TABLE (XmlData XML)
DECLARE @Emp TABLE (ID INT, Name VARCHAR(15))
INSERT @Source VALUES
('<emp><Name>Alice</Name><ID>1</ID></emp><emp><Name>Bob</Name><ID>2</ID></emp>'),
('<emp><Name>Max</Name><ID>3</ID></emp>')
INSERT @Emp (ID, Name)
SELECT
Employees.Emp.value('ID[1]', 'INT') AS ID,
Employees.Emp.value('Name[1]', 'VARCHAR(25)') AS Name
FROM @Source SRC
CROSS APPLY SRC.XmlData.nodes('/emp') AS Employees(Emp)
SELECT * FROM @Emp
以上示例中目标表的输出如下。我添加了第二条记录,以显示仅2个SQL行中的3 xml“emp”元素如何正确插入3个目标记录。
ID Name
----------- ---------------
1 Alice
2 Bob
3 Max