将 XML table 插入 SQL table

Inserting a XML table into a SQL table

我正在尝试将 XML 文件放入 SQL table。我已经使用以下代码成功地将 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>
...

您最后的评论没有直接针对任何用户(例如 @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>';

现在我创建一个临时文件 table 来测试插入

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