Bonjour,
Je souhaiterais réaliser dans une fonction un OpenXML dans lequel, les requêtes XPath correspondant aux différents champs de la table résultat sont construites à partir d'une variable.
Le principe est de construire la commande OpenXML sous la forme d'une chaine de caractère (sCmd) dans laquelle j'ajoute mes variables puis de faire EXEC(sCmd).
Lors de l'appel de ma fonction j'ai une erreur lors de l'execution de cette commande (syntaxe incorrecte vers 'premier paramètre de OpenXML').
Voici la fonction que j'ai réaliser pour faire ce test unitaire :
-- suppression de la fonction
drop procedure sp_Openxml_test
go
-- création de la fonction
CREATE PROCEDURE sp_Openxml_test
@strXML ntext
AS
BEGIN
DECLARE @iDoc int
DECLARE @iIndex int
DECLARE @sXPath varchar(50)
DECLARE @sQuery varchar(200)
SET @iIndex = 2
SET @sXPath = 'Id[' + CAST(@iIndex as varchar(50)) + ']'
EXECUTE sp_xml_preparedocument @iDoc OUTPUT, @strXML
select @sQuery = 'SELECT *
FROM OpenXML('+CAST(@iDoc as varchar(50))+', '+'''/Balise'''+', 2)
WITH (
ID varchar(10) '''+@sXPath+'''
)'
EXEC(@sQuery)
EXECUTE sp_xml_removedocument @iDoc
END
GO
-- appel de la fonction
DECLARE @sDoc varchar(1000)
SET @sDoc ='
<Balise>
<Id>25</Id>
<Id>26</Id>
</Balise>'
EXEC sp_Openxml_test @sDoc
Le problème semble être lié à l'interprétation du premier paramètre de OpenXml (@iDoc). Le message étant syntaxe incorrecte vers 'valeur numérique de @iDoc'
Merci d'avance
Partager