【发布时间】:2016-12-25 05:45:43
【问题描述】:
我正在尝试使用 OpenXML 和 BulkColumn 从一个大的 xml 文件中提取数据,然后将其保存到一个名为 badges 的新表中。 我也在执行一个 select 语句来显示表格的内容。 该文件存储在本地。该文件使用以属性为中心的映射,有数万行。 我使用的代码是:
CREATE TABLE dbo.badges (
Id int,
Name NVARCHAR(1000),
Date date,
Class smallint,
TagBased nvarchar(10),
);
DECLARE @XMLDoc XML;
DECLARE @XMLDocID INT;
SELECT @XMLDoc = BulkColumn
FROM OPENROWSET(BULK 'C:\Users\Zuhair\Desktop\Badges.xml', SINGLE_BLOB);
EXEC sys.sp_xml_preparedocument @XMLDocID OUTPUT, @XMLDoc;
SELECT Id, Name, Date, Class, TagBased
FROM OPENXML(@XMLDocID, '/badges/row')
WITH (Id int 'Id',
Name NVARCHAR(1000) 'Name',
Date date 'Date',
Class smallint 'Class',
TagBased nvarchar(10) 'TagBased');
INSERT INTO dbo.badges (Id, Name, Date, Class, TagBased)
SELECT *
FROM OPENXML(@XMLDocID, '/badges/row')
WITH (Id int 'Id',
Name NVARCHAR(1000) 'Name',
Date date 'Date',
Class smallint 'Class',
TagBased nvarchar(10) 'TagBased');
exec sp_xml_removedocument @XMLDocID;
但是,当我执行上述代码时,我得到以下结果:
这是我正在使用的 XML 数据示例:
<badges>
<row Id="1" UserId="2" Name="Autobiographer" Date="2010-08-11T18:25:03.937" Class="3" TagBased="False" />
<row Id="2" UserId="3" Name="Autobiographer" Date="2010-08-11T18:25:03.997" Class="3" TagBased="False" />
<row Id="3" UserId="4" Name="Autobiographer" Date="2010-08-11T18:25:04.107" Class="3" TagBased="False" />
<row Id="4" UserId="22" Name="Autobiographer" Date="2010-08-11T19:35:05.283" Class="3" TagBased="False" />
<row Id="5" UserId="33" Name="Autobiographer" Date="2010-08-11T19:35:05.330" Class="3" TagBased="False" />
<row Id="6" UserId="27" Name="Autobiographer" Date="2010-08-11T19:40:05.490" Class="3" TagBased="False" />
...
</badges>
为什么我得到的是这个结果,而不是一个包含所需数据的表?
【问题讨论】:
-
当前案例与其他案例的不同之处在于,除了使用 OpenXML 之外,我还使用 BulkColumn(Single_Blob 类型)。
标签: sql-server xml tsql sql-server-2014