MSSQL 2000 : OPENXML Dynamique
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 :
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
|
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 |
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.
Erreur 156 : Syntaxe incorect vers le mot clé CONVERT
J'ai essayé de faire sans le CONVERT, c'est-à-dire :
Code:
1 2
|
EXECUTE('SELECT * FROM OPENXML ('+@IDOC+', ''/RACINE_MAJ/ELEMENT'',1) WITH ('+@XML_DEF+')') |
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.
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.