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
| WITH
T AS
(
SELECT ID, NUM, SUBSTRING(texte, NUM, 1) COLLATE French_CS_AS AS LETTRE,
COALESCE(char2, SUBSTRING(texte, NUM, 1)) AS car
FROM dbo.test
INNER JOIN T_NUM
ON NUM <= LEN(texte)
LEFT OUTER JOIN dbo.remplacement
ON SUBSTRING(texte, NUM, 1) = char1 COLLATE French_CS_AS
),
TR AS
(
SELECT ID, NUM, CAST(car AS VARCHAR(max)) AS texte_corrige
FROM T
WHERE NUM = 1
UNION ALL
SELECT TR.ID, T.NUM, TR.texte_corrige + T.car
FROM T
INNER JOIN TR
ON T.NUM = TR.NUM + 1
AND T.ID = TR.ID),
TF AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY NUM DESC) AS N
FROM TR
)
SELECT TF.ID, texte, texte_corrige
FROM TF
INNER JOIN dbo.test AS T
ON TF.id = T.id
WHERE N = 1 |
Partager