将XML表插入SQL表

时间:2016-06-10 14:33:11

标签: sql-server xml sql-server-2005 sqlxml

我试图将XML文件放入SQL表中。我使用以下代码成功地将XML文件导入SQL服务器:

declare @xmldata as xml

set @xmldata = (SELECT CONVERT(XML, BulkColumn)AS Bulkcolumn
FROM OPENROWSET (BULK 'filedestination', SINGLE_BLOB) as X)

以下代码片段是我收到错误的地方。我知道我必须使用INSERT INTO语句,但我不确定我在哪里出错。

INSERT INTO t1(c1, c2, c3)
SELECT  
c1 AS 'c1',
c2 AS 'c2',
c3 as 'c3'

我目前正在使用SQL Server 2005。

XML文件看起来像这样

<row>
<c1> DATA </c1>
<c2> DATA </c2>
<c3> DATA </c3>
</row>
...

1 个答案:

答案 0 :(得分:0)

根据您的上次评论,您没有直接向任何用户发送消息(例如@Shnugo),因此没有提醒。没有人明显找到你的编辑......

不知道这仍然是一个悬而未决的问题,但这是一个答案:

这是您加载文件的方式

declare @xmldata as xml;
set @xmldata = 
(
    SELECT CONVERT(XML, BulkColumn)AS Bulkcolumn
    FROM OPENROWSET (BULK 'filedestination', SINGLE_BLOB) as X
);

现在变量@xmldata应该包含您已经在编辑中发布的XML。只是为了测试我将变量设置为一些合适的内容:

SET @xmldata=
'<root>
    <row>
        <c1>DATA1</c1>
        <c2>DATA2</c2>
        <c3>DATA3</c3>
    </row>
    <row>
        <c1>DATA4</c1>
        <c2>DATA5</c2>
        <c3>DATA6</c3>
    </row>
</root>';

现在我创建一个临时表来测试插入

CREATE TABLE #t1(c1 VARCHAR(100),c2 VARCHAR(100),c3 VARCHAR(100));

这是插入数据的方法:

INSERT INTO #t1 
SELECT One.Rw.value('c1[1]','varchar(100)')
      ,One.Rw.value('c2[1]','varchar(100)')
      ,One.Rw.value('c3[1]','varchar(100)')
FROM @xmldata.nodes('/root/row') AS One(Rw);

SELECT * FROM #t1;

GO
DROP TABLE #t1;

这是结果:

c1      c2      c3
DATA1   DATA2   DATA3
DATA4   DATA5   DATA6