繁体   English   中英

如何从XML列复制数据并将其插入到包含与MS SQL SERVER中的XML标记名称相同的列名称的表中

[英]How to Copy data from XML Column and Insert it into a Table which Contains column names same as XML Tag Names in MS SQL SERVER

说如果我有包含XML单类型Eg单列的表:

    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 Tag名称相同的列名称,即

    Emp
    Name            ID
    Alice           1
    Bob             2

我已经尝试过OPENXML,XQUERY等。 似乎无法逐列阅读并插入该行。 你能指导我吗?

我想你可以做到的。

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字符串制作输出表时,可以使用它插入另一个表。

http://programcall.com/11/dotnet/how-to-read-data-from-xml-string--and-insert-to-table-sql-server.aspx

与原始表在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM