UPDATE SET @Variable DML_XML
Bonjour à tous,
le principe de ma requête consiste à récupérer un champ xml d'une base de données SQL et remplacer une chaine par une autre dans ce champ xml.
Dans mon exemple le mot "Dormant" est remplacer par "Dt"
Dans un 1er temps je récupére tous les champs contenant ma chaine a remplacer puis je les stocke dans la table "Descr" avec les colonnes "Descr_Old" (ancien descriptif) et "Descr_New" (Nouveau descriptif)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
USE WM2016;
BEGIN;
DECLARE @NewValue Varchar(255);
--SET @NewValue = 'Test';
WITH Descr AS
(
SELECT
Description.value('(//Value/text())[1]', 'varchar(40)') AS Descr_Old
,REPLACE(Description.value('(//Value/text())[1]', 'varchar(40)'), 'Dormant', 'Dt') AS Descr_New
FROM
[WM2016].[dbo].[WMProduct]
WHERE
LongDescription.value('(//Value/text())[1]', 'varchar(40)') LIKE '%Dormant%'
) |
Cette partie de la requête fonctionne.
Dans un second temps je souhaite réécrire le champ xml en remplaçant l'ancien descriptif par le nouveau.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
UPDATE WMProduct
SET @NewValue = Descr.Descr_New, Description.modify
(
'replace value of (//Value/text())[1]
with sql:variable("@NewValue")'
)
FROM Descr
WHERE
Description.value('(//Value/text())[1]', 'varchar(40)') = Descr_Old
--SELECT @NewValue
END; |
En assemblant ces 2 codes, vous avez l'intégralité de ma requête.
Mon problème : La variable @NewValue est pas affecté par "SET @NewValue = Descr.Descr_New", le reste de la requête fonctionne.
Quand j'active la ligne "SET @NewValue = 'Test';" au début :
@NewValue prend la valeur "Test" et est assigné à tous les champs "Description"
Si j'active aussi le SELECT "@NewValue" à la fin, sa valeur correspond bien au résultat que je souhaite.
J’espère avoir été clair.