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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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