2010-07-30 5 views
1

Étant donné qu'un dossier complet de documents XML simples a la même structure, existe-t-il un moyen rapide de charger tous les documents dans une table temporaire ou de traiter le dossier comme une table , afin d'interroger les documents avec la syntaxe de requête SQL 2005 XML?Interroger tous les fichiers XML dans un répertoire à partir de SQL Server

Les exemples de chargement en bloc que j'ai vus, tous essaient d'analyser le document XML lors du chargement. Pour moi, ce n'est pas nécessaire car je suis heureux que le fichier entier soit traité comme une seule colonne de type 'xml'. L'analyse sera gérée par la syntaxe de la requête.

Répondre

2

C'est en effet une bonne idée, car tous les fichiers xml ont la même structure. Je ne suis pas sûr de charger des fichiers xml dans la table temporaire, mais vous pouvez créer une table dans SQL Server 2005 avec datatype xml et stocker chaque fichier xml en tant qu'enregistrement. De cette façon, vous pouvez utiliser XML.Query ou XML.Value pour interroger.

Cet article couvre presque tout ce que vous voulez savoir sur requête XML dans SQL Server ...

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

Il y a des tutoriels disponibles en abondance dans BeyondRelational.com
& blog de Jacob Sebastian.

À la votre!

+0

Merci @Sandy, Je ne connaissais pas la fonctionnalité 'doc ("myxmlfile.xml") ...' décrite dans votre premier lien. Cela pourrait être utile ... – grenade

+0

@grenade, Cool! mais est-il utilisé pour un seul fichier xml? – CoderHawk

+0

Oui, mais je pense à une sorte d'itération ... – grenade

0

La solution que j'ai adoptée est ci-dessous. Je ne suis pas vraiment content à cause de la boucle et du fait qu'il a fallu un certain temps pour que ça fonctionne, quand on pense que ce genre de fonctionnalité pourrait être inclus et que je l'ai raté. Dans tous les cas, le SQL ci-dessous vous laisser avec une variable de table contenant le contenu de votre répertoire XML avec une ligne pour chaque fichier, une colonne contenant le nom du fichier et un autre contenant son contenu 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 
Questions connexes