Запросите все XML-файлы в каталоге от SQL Server

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

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

1
задан grenade 30 July 2010 в 08:28
поделиться

2 ответа

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

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

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

В имеется множество руководств. BeyondRelational.com
и Блог Джейкоба Себастьяна .

Ура!

2
ответ дан 2 September 2019 в 22:34
поделиться

Решение, которое я принял, приведено ниже. Я не очень доволен им из-за циклов и того факта, что потребовалось время, чтобы заставить его работать, когда можно подумать, что подобная функциональность может быть включена, а я ее упустил. В любом случае, 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
0
ответ дан 2 September 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: