Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2011, 16h56   #1
Invité régulier
 
lle lle
Inscription : novembre 2009
Messages : 29
Détails du profil
Informations personnelles :
Nom : lle lle

Informations forums :
Inscription : novembre 2009
Messages : 29
Points : 5
Points : 5
Par défaut SQL-SERVER et chargement d'un xml

Bonjour,

1. Dans un a applicatif je pose des fichiers xml dans un répertoire.
2. Ensuite je lis ces fichiers xml pour les intégrer dans une table.

J'ai un programme externe qui tourne et pool sur le répertoire afin de lire tout les fichiers present dans ce répertoire (je ne sais pas comment faire cela directement dans sql server).

J'ai donc le premier script qui a le contenu suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
LOADXML
 
USE [mattec-epobus]
GO
/****** Object:  StoredProcedure [dbo].[usp_LoadXML]    Script Date: 02/14/2011 16:52:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[usp_LoadXML](@XMLInputFile varchar(300))
 
AS 
 
--DECLARE @xmlInputFile varchar(300)
--set @xmlInputFile = 'd:\General_Input\FAILED_FR08_epobus_MATTEC_PROD_DECLARATION_8.xml'
 
BEGIN
 
DECLARE @UniqueID int
DECLARE @ID int
DECLARE @MessageType varchar(1)
DECLARE @MessageDetail varchar(50)
 
DELETE FROM XMLImport
 
EXEC usp_ImportXML @XMLInputFile
 
INSERT INTO [XMLInputData](
[ID],
[mat_doc],
[message],
[pstng_date],
[doc_date],
[type],
[system])
 
SELECT tab.col.value('./unique[1]','varchar(50)') AS 'ID',
	tab.col.value('./mat_doc[1]','varchar(50)') AS 'mat_doc',
	tab.col.value('./message[1]','varchar(200)') AS 'message',
	tab.col.value('./pstng_date[1]','varchar(50)') AS 'pstng_date',
	tab.col.value('./doc_date[1]','varchar(50)') AS 'doc_date',
	tab.col.value('./type[1]','varchar(1)') AS 'type',
	tab.col.value('./system[1]','varchar(50)') AS 'system'
FROM [XMLImport]
CROSS APPLY
xml_data.nodes('//result') AS tab(col)
 
SET @UniqueID = (SELECT Max(UniqueID) FROM XMLInputData)
SET @ID = (SELECT ID FROM XMLInputData WHERE UniqueID = @UniqueID)
SET @MessageType  = (SELECT type FROM XMLInputData WHERE UniqueID = @UniqueID)
SET @MessageDetail  = (SELECT message FROM XMLInputData WHERE UniqueID = @UniqueID)
 
UPDATE XMLInputData SET Processdate = getdate()
WHERE UniqueID = @UniqueID
 
UPDATE dbo.ShiftExportToSAP SET 
STATUS = (case when @Messagetype = 'E' THEN 3 ELSE 2 END),
[Message Type]=@MessageType,
[Message Detail]=@MessageDetail
WHERE  dbo.ShiftExportToSAP.ShiftExportToSAPID = @ID
 
END
Puis le second (qui est appeler par le premier) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
IMPORTXML
 
USE [mattec-epobus]
GO
/****** Object:  StoredProcedure [dbo].[usp_ImportXML]    Script Date: 02/14/2011 16:53:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
 
ALTER PROCEDURE [dbo].[usp_ImportXML](@xmlInputFile varchar(300))
 
AS
 
BEGIN
 
--DECLARE @xmlInputFile varchar(300)
--set @xmlInputFile = 'D:\General_Input\FAILED_FR08_epobus_MATTEC_PROD_DECLARATION_6.xml'
 
 
--INSERT INTO [Table_2](
--[test_001])
--SELECT @xmlInputFile as 'test_001'
 
 
EXEC('INSERT INTO XMLImport(xmlFileName, xml_data)
 
SELECT ''' + @xmlInputFile + ''', xmlData
FROM ( SELECT * FROM OPENROWSET ( BULK ''' + @xmlInputFile + ''', SINGLE_BLOB) AS XMLDATA)
AS FileImport (XMLDATA)')
 
END
J'ai un programme externe qui appelle pour chaque fichier present dans le repertoire le script LOADXML. Or il s'averes que cela bloques sur le deuxieme script lorsque l'appel viens de l’extérieur.
La routine 'EXEC('INSERT INTO XMLImport(xmlFileName, xml_data)

Code :
1
2
3
SELECT ''' + @xmlInputFile + ''', xmlData
FROM ( SELECT * FROM OPENROWSET ( BULK ''' + @xmlInputFile + ''', SINGLE_BLOB) AS XMLDATA)
AS FileImport (XMLDATA)')'
a priori ne se fait pas.

Par contre si je mets en dur dans les scripts un nom de fichier, cela fonctionne PARFAITEMENT. Je n'y comprends rien d'autant que sur un autre système cela marche.

Je suis sur 2008 et a priori cela fonctionne très bien en 2005.

Toute aide me sera précieuse.

Merci
ytsack est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h39.


 
 
 
 
Partenaires

Hébergement Web