给定一个文件夹,其中包含所有具有相同结构的简单XML文档,是否可以快速将所有文档加载到临时表中或将文件夹视为表,以便使用SQL查询文档2005 XML查询语法?
我看到的批量加载示例都试图在加载时解析XML文档。对我来说这没有必要,因为我很高兴整个文件被视为'xml'类型的单个列。解析将由查询语法处理。
答案 0 :(得分:2)
这确实是个好主意,因为所有的xml文件都有相同的结构。我不确定是否将xml文件加载到临时表中,但您可以在SQL Server 2005中使用数据类型xml创建一个表,并将每个xml文件存储为记录。这样您就可以使用XML.Query或XML.Value进行查询。
本文几乎涵盖了您想要了解的有关SQL Server中XML查询的所有内容...
http://www.15seconds.com/issue/050803.htm
BeyondRelational.com中提供了丰富的教程 &安培; Jacob Sebastian的博客。
干杯!
答案 1 :(得分:0)
我采用的解决方案如下。我不是很满意它,因为循环和它需要一段时间才能使它工作,你会认为这种功能可以被包括在内并且我错过了它。在任何情况下,下面的SQL都将为您提供一个表变量,其中包含XML目录的内容,每个文件都有一行,一行包含文件名,另一行包含XML内容。
declare @directory varchar(256) set @directory = 'C:\Temp'
declare @filecount int, @fileindex int, @linecount int, @lineindex int
declare @filename varchar(255), @arg varchar(512), @contents varchar(8000)
set @arg = 'dir ' + @directory + '\ /A-D /B'
declare @dir table ([filename] varchar(512))
insert @dir exec master.dbo.xp_cmdshell @arg
declare @files table (id int not null identity(1,1), [filename] varchar(512), [content] xml null)
insert into @files ([filename]) select [filename] from @dir where [filename] like '%.xml'
select @filecount = count(*) from @files
set @fileindex = 0
while @fileindex < @filecount begin
set @fileindex = @fileindex + 1
select @filename = @directory + '\' + [filename] from @files where id = @fileindex
set @contents = ''
set @arg = 'type ' + @filename
create table #lines(id int not null identity(1,1), line varchar(255))
insert into #lines exec master.dbo.xp_cmdshell @arg
select @linecount = count(*) from #lines
set @lineindex = 0
while @lineindex < @linecount begin
set @lineindex = @lineindex + 1
select @contents = @contents + line from #lines where Id = @lineindex
end
drop table #lines
update @files set [content] = @contents where id = @fileindex
end
select * from @files
go