Запросить все XML-файлы в каталоге с SQL Server - PullRequest
1 голос
/ 30 июля 2010

Учитывая папку, полную простых XML-документов, которые имеют одинаковую структуру, существует ли быстрый способ загрузить все документы во временную таблицу или обработать папку как таблицу, чтобы запросить документы с помощью SQL Синтаксис XML-запроса 2005?

Примеры массовой загрузки, которые я видел, все пытаются анализировать XML-документ во время загрузки. Для меня это не является необходимым, так как я рад, что весь файл рассматривается как один столбец типа «xml». Разбор будет обрабатываться синтаксисом запроса.

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

Это действительно хорошая мысль, потому что все XML-файлы имеют одинаковую структуру.Я не уверен насчет загрузки файлов xml во временную таблицу, но вы можете создать таблицу обслуживания в SQL Server 2005 с типом данных xml и сохранить каждый файл xml в виде записи.Таким образом, вы можете использовать XML.Query или XML.Value для запроса.

Эта статья охватывает почти все, что вы хотите знать о запросе XML в SQL Server ...

http://www.15seconds.com/issue/050803.htm

В блоге BeyondRelational.com
& имеется множество учебников.

Ура!

0 голосов
/ 30 июля 2010

Решение, которое я принял, приведено ниже.Я не очень доволен этим из-за зацикливания и того факта, что потребовалось некоторое время, чтобы заставить его работать, когда вы думаете, что этот вид функциональности может быть включен, и я пропустил это.В любом случае приведенный ниже 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...