Bonjour à tous,
Je souhaiterai savoir s'il est possible d'effectuer des requêtes dynamiques en utilisant la syntaxe OPENXML.
En effet, je suis en train de réaliser une procédure stockée générique qui me permet de récupérer dynamiquement ma liste des champs et leurs types. Je crée ensuite une chaîne servant dans la partie WITH de OPENXML.
Exemple du code de ma procédure :
Mon seul soucis est que je ne peux pas utiliser directement la valeur de ma variable @IDOC dans ma requête dynamique. En effet, une erreur est généré lorsque je souhaite enregistrer ma 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
36
37
38
39
40
41 CREATE PROCEDURE USP_TEST_MAJ_GENE_V01 @IDTRAIT INT, @FLUX TEXT AS DECLARE @IDOC INT DECLARE @NOM_CHAMP VARCHAR(255) DECLARE @TYPE_CHAMP VARCHAR(255) DECLARE @CLE TINYINT DECLARE @XML_DEF VARCHAR(4000) DECLARE @TEST VARCHAR(8000) SET @XML_DEF='' DECLARE TEST_CURSOR CURSOR FOR SELECT NOM_CHAMP,TYPE_CHAMP,CLE_RECHERCHE FROM T_MAJ_FORMAT_FIC WHERE ID_MAJ=@IDTRAIT OPEN TEST_CURSOR FETCH NEXT FROM TEST_CURSOR INTO @NOM_CHAMP,@TYPE_CHAMP,@CLE WHILE @@FETCH_STATUS = 0 BEGIN SET @XML_DEF = @XML_DEF+@NOM_CHAMP+' '+@TYPE_CHAMP+',' FETCH NEXT FROM TEST_CURSOR INTO @NOM_CHAMP,@TYPE_CHAMP,@CLE END CLOSE TEST_CURSOR DEALLOCATE TEST_CURSOR SET @XML_DEF = LEFT(@XML_DEF,LEN(@XML_DEF)-1) PRINT @XML_DEF -- Create an internal representation of the XML document. EXECUTE sp_xml_preparedocument @IDOC OUTPUT, @FLUX EXECUTE('SELECT * FROM OPENXML ('+CONVERT(VARCHAR(10),@IDOC)+', ''/RACINE_MAJ/ELEMENT'',1) WITH ('+@XML_DEF+')') /*SET @TEST = 'SELECT * FROM OPENXML('+CONVERT(VARCHAR(10),@IDOC)+',''/RACINE_MAJ/ELEMENT'',1) WITH('+@XML_DEF+')' PRINT @TEST EXECUTE(@TEST) */ --SELECT * FROM OPENXML(@IDOC,'/RACINE_MAJ/ELEMENT',1) EXECUTE sp_xml_removedocument @IDOC
Erreur 156 : Syntaxe incorect vers le mot clé CONVERT
J'ai essayé de faire sans le CONVERT, c'est-à-dire :
A ce moment, il n'y a pas d'erreurs à l'enregitrement de la procédure. Mais une erreur est levée lors de l'exécution de ma procédure stockée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 EXECUTE('SELECT * FROM OPENXML ('+@IDOC+', ''/RACINE_MAJ/ELEMENT'',1) WITH ('+@XML_DEF+')')
Serveur : Msg 170, Niveau 15, État 1, Ligne 1
Ligne 1 : syntaxe incorrecte vers '1'.
Je vous demande donc de l'aide afin de pouvoir passer cette requête en dynamique. Une fois que jepourrai exécuter des requêtes dynamiques avec OPENXML, je pourrai passer à l'étape d'enrichissement des tables via des UPDATE ... FROM et INSERT ... SELECT...
En vous remerciant de votre aide.
Partager