【发布时间】:2017-11-08 15:17:06
【问题描述】:
我有多个结构相同的 XML 文件,我已使用以下命令将它们导入到 SQL Server 2017:
DDL:
CREATE DATABASE xmlFiles
GO
USE xmlFiles
CREATE TABLE tblXMLFiles (IntCol int, XmlData xml);
GO
DML:
USE xmlFiles
INSERT INTO [dbo].[tblXMLFiles](XmlData) SELECT * FROM OPENROWSET(BULK 'C:\xmls\1.xml', SINGLE_BLOB) AS x;
INSERT INTO [dbo].[tblXMLFiles](XmlData) SELECT * FROM OPENROWSET(BULK 'C:\xmls\2.xml', SINGLE_BLOB) AS x;
…
INSERT INTO [dbo].[tblXMLFiles](XmlData) SELECT * FROM OPENROWSET(BULK 'C:\xmls\N.xml', SINGLE_BLOB) AS x;
现在我要查询数据:
USE xmlFiles
GO
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)
SELECT @XML = XmLData FROM tblXMLFiles
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML
SELECT Surname , GivenNames
FROM OPENXML(@hDoc, 'article/ref-list/ref/mixed-citation')
WITH
(
Surname [varchar](100) 'string-name/surname',
GivenNames [varchar](100) 'string-name/given-names'
)
EXEC sp_xml_removedocument @hDoc
GO
查询正在运行,但问题是它仅在数据源表中只有一行时才返回数据 — tblXMLFiles。如果我添加多于一行,我会得到空结果集。
重要提示:
如果我在外部SELECT 子句(SELECT @XML = XmLData…)中添加TOP 语句,情况就会发生变化,然后它会根据TOP 的值返回特定行号的查询数据。
问题:
表中的数据不是只有一行,而是很多行,如何取回数据?
【问题讨论】:
标签: sql-server xml sqlxml sql-server-2017