Bonjour
Je cherche à faire une fonction qui prend en entrée une chaine et renvoie cette même chaine avec les abréviations corrigées. J'ai une table "Abreviations" qui contient toutes les abréviations autorisée par la norme et les mots auxquelles elles correspondent.
J'ai fais la fonction suivante mais quand je l'appelle dans ma procédure stockée, elle rallonge considérablement le temps d'execution et j'aimerai donc pouvoir l'optimiser mais je ne vois pas trop comment :(
CREATE Function F_TITRESRUE (@ENTREE varchar(50))
returns varchar(50)
as
begin
declare @S varchar(50)
declare @TMP varchar(50)
declare @MOT varchar(50)
declare @ABREV varchar(50)
declare @NBMOT int
declare @I int
set @NBMOT = (select presse.dbo.F_COMPTEMOTS(@ENTREE))
set @I = 1
set @TMP = @ENTREE
set @S = @ENTREE
while @I <= @NBMOT
begin
set @MOT = ltrim(rtrim(left(@TMP, CHARINDEX(' ', @TMP))))
if @MOT in (select ABREVIATION from Abreviations)
begin
set @ABREV = (select MOT from Abreviations where ABREVIATION = @MOT and ORDREABREV = 1)
set @S = rtrim(ltrim(replace(' '+@S+' ', ' '+@MOT+' ', ' '+@ABREV+' ')))
end
set @TMP = ltrim(rtrim(right(@TMP, (len(@TMP) - len(@MOT)))))
set @I = @I + 1
end
return rtrim(ltrim(@S))
end
Quelqu'un aurait une idée ?
Merci