openrowset保存到多行

时间:2017-04-27 19:57:10

标签: xml sql-server-2008

我有一个xml文件

<Out>
    <R>
        <S>
            <UID>111-20090817192401</UID>
        </S>
    </R>
</out>
<Out>
    <R>
        <S>
            <UID>222-30090817192401</UID>
        </S>
    </R>
</Out>

我想将每个节点保存到SQL服务器行中。我怎么能这样做?

SELECT @XMLDATA=BulkColumn 
 FROM OPENROWSET(BULK 'c:\test.xml', SINGLE_CLOB) AS xmlData

这将两个XML outernodes作为一条记录返回。我怎么能这样做?

预期输出

create table dbo.temp(ID  INT IDENTITY PRIMARY KEY, Out varchar(10) null,R varchar(10) null,S varchar(10) null,uid varchar(20) null);
insert into dbo.temp values(null,null,null,111-20090817192401)
insert into dbo.temp values(null,null,null,222-30090817192401)

1 个答案:

答案 0 :(得分:1)

阅读完文件内容后,将其转换为xml并使用nodes()进行查询:

DECLARE @XMLDATA AS xml 
SELECT @XMLDATA=CAST(BulkColumn AS xml)
 FROM OPENROWSET(BULK 'c:\test.xml', SINGLE_CLOB) AS xmlData

create table dbo.temp(ID  INT IDENTITY PRIMARY KEY, Out varchar(10) null,R varchar(10) null,S varchar(10) null,uid varchar(20) null);

INSERT INTO dbo.temp(uid)
SELECT r.value('.', 'varchar(20)')
FROM @XMLDATA.nodes('//UID') x(r)