IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

xquery dans procédure stockée


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Chef de projet Technique
    Inscrit en
    Avril 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet Technique

    Informations forums :
    Inscription : Avril 2007
    Messages : 89
    Par défaut xquery dans procédure stockée
    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 :

    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
    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
    Msg 2205, Niveau 16, État 1, Procédure test, Ligne 19
    XQuery [value()]: ")" attendu.
    L'erreur semble être au niveau de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @Donnee = @FluxXML.value('(MULTISUR/INFOBANCMESURES[@IDINFOBANCMESURES="[sql:variable("@idRecherche")]"]/MARQUEINFOBANCMESURES)[1]','VARCHAR(20)')
    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="1"]/MARQUEINFOBANCMESURES)[1]','VARCHAR(20)')
    et là je n'est plus d'erreur à l’exécution.

    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

  2. #2
    Membre éprouvé
    Profil pro
    Chef de projet Technique
    Inscrit en
    Avril 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet Technique

    Informations forums :
    Inscription : Avril 2007
    Messages : 89
    Par défaut
    J'ai réussi a faire la recherche dans le flux XML en fonction d'une variable SQL avec la syntaxe FLWOR, ce qui donne :

    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
    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 = CONVERT(varchar(20),@FluxXML.query('
    							for $Marque in //INFOBANCMESURES
    							let $idBanc := $Marque/@IDINFOBANCMESURES
    							where ($idBanc = sql:variable("@idInfoBancWinsur"))
    							return $Marque/MARQUEINFOBANCMESURES/text()
    							'))
     
    		--/****************
    		--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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/08/2021, 14h52
  2. Alter table dans procédure stockée
    Par mehitabelle dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/11/2005, 16h14
  3. Réponses: 7
    Dernier message: 16/09/2005, 10h14
  4. procédures stockées dans procédure stockée
    Par olivc dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 30/05/2005, 16h58
  5. SQL dans Procédure stockée
    Par julure dans le forum Oracle
    Réponses: 13
    Dernier message: 02/11/2004, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo