Bonjour,
Je souhait écrire une procédure stocké qui décompose un flux XML, pour remplir une table, j'ai donc écrire le code suivant :
Mais SQL Server me renvoi l'erreur suivante lorsque j'exécute le code de création de la procédure
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 CREATE PROCEDURE dbo.test( @FluxXML XML ) AS DECLARE @eCleParcourXML INT, @bRetour BIT, @idRecherche INT, @Donnee VARCHAR(20); BEGIN TRY --init de la clé de parcours du flux XML SET @eCleParcourXML = 1 --Recherche des valeurs à ajouter WHILE @FluxXML.exist('(MULTISUR/MESURES)[sql:variable("@eCleParcourXML")]')=1 BEGIN --recherche de l'id SET @idRecherche = @FluxXML.value('(MULTISUR/MESURES[sql:variable("@eCleParcourXML")]/IdInfoBancMesures)[1]','INT') --recherche de la donnée en fonction de l'ID SET @Donnee = @FluxXML.value('(MULTISUR/INFOBANCMESURES[@IDINFOBANCMESURES="[sql:variable("@idRecherche")]"]/MARQUEINFOBANCMESURES)[1]','VARCHAR(20)') --/**************** --code d'insertion --****************/ --incrémentation de la clé de parcours SET @eCleParcourXML = @eCleParcourXML+1 END SET @bRetour = 1 END TRY BEGIN CATCH SET @bRetour = 0 END CATCH SELECT @bRetour as retour
L'erreur semble être au niveau de la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Msg 2205, Niveau 16, État 1, Procédure test, Ligne 19 XQuery [value()]: ")" attendu.
j'ai donc essayé sans le sql:variable ce qui donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SET @Donnee = @FluxXML.value('(MULTISUR/INFOBANCMESURES[@IDINFOBANCMESURES="[sql:variable("@idRecherche")]"]/MARQUEINFOBANCMESURES)[1]','VARCHAR(20)')
et là je n'est plus d'erreur à l’exécution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SET @Donnee = @FluxXML.value('(MULTISUR/INFOBANCMESURES[@IDINFOBANCMESURES="1"]/MARQUEINFOBANCMESURES)[1]','VARCHAR(20)')
Quelqu'un aurait il déjà eu le problème? Si oui comment le résoudre ?
Merci d'avance.
PS : Je suis sur une version 2008R2 de SQL Server
Partager