Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Je n'arrive pas à optimiser ma fonction [ Archives / Problème avec une fonction ] (oluha)

jeudi 2 juin 2005 à 12:27:38 | Je n'arrive pas à optimiser ma fonction

oluha

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


lundi 13 juin 2005 à 14:22:58 | Re : Je n'arrive pas à optimiser ma fonction

moustachu

Membre Club
J'espère pouvoir t'aider un peu :
- Je suis loin de tout connaître en TSQL mais n'existe-t-il pas une fonction trim ?
- As-tu créé un index sur ABREVIATION de ta table Abreviations ?
- if @MOT in (select ABREVIATION from Abreviations). Tu fais cette requête à chaque boucle, à chaque fois, tu demande l'ensemble de la table abreviations. Peut être faire un truc du genre (select @nb=count(ABREVIATION) from Abreviations where ABREVIATION=@MOT) ensuite tu testes le @nb
- Ou même, plus directement après ton set @ABREV = (select MOT from Abreviations where ABREVIATION = @MOT and ORDREABREV = 1), tu testes si @ABREV n'est pas '' ou null (je ne sais pas ce que tu obtiendras)

 


++
Moustachu



Cette discussion est classé dans : set, mot, declare, tmp, varchar


Répondre à ce message

Sujets en rapport avec ce message

Longueur de la commande d'arguments de xp_cmdShell [ par Toub63 ] Bonjour,J'ai créé un déclencheur sur une table dans SQL Server 2000.Ce dernier se déclenche lors de la modification d'une ligne.Voici le code correspo max substring sous sql serveur ! [ par jimmy69 ] Bonjour a tous, Je debute sous ms sql serveur 2000 J'ai une table Tprogres ou les utilisateurs entrent des donnees simples ... a chaque insertion un e Comment déclarer une variable 2 fois [ par gentlegiant ] Bonjour,Ça semble assez étrange mais j'ai besoin de savoir s'il est possible de déclarer 2 fois la même variable:   DECLARE @ma_variable VARCHAR(10);  probleme apres changement mot de passe mysql dans directadmin [ par eurocrimea ] Salut a tous, nouveau sur le forum... ne suis pas informaticien français a l étranger suis passe par un local pour me faire un site. ...m a qui m a lâ acces urgent : Mettre un mot de passe à une base access sur un réseau [ par micou26 ] Avant de commencer, je tiens à préciser que je suis débutant dans le monde informatique et d'access. Merci de votre compréhension.Voilà mon problème, SELECT IN [ par whouu ] Salut a tous, je fais court et clair, un utilisateur fais une recherche il entre un mot dans un champ texte par ex "maison" , je fais un select dans m CHAR,VARCHAR,NVARCHAR limite dans les procédures stockée? [ par karn ] Bonjour,j'ai une question qui me  gratte depuis un bout de temps,Voila j'ai remarque qu'il est impossible de remplir correctement un NVARCHAR(4000) pa Réinitialiser un auto incrément en sql [ par ptesoleil ] PteSoleil J'ai une table E définit comme suivant : EnzymeID (Primary Key - autoincrement)                                                           EC Mauvais resultat [ par Zachs ] Hello, j'ai un problème avec une de mes requêtes.DECLARE @idlounge int DECLARE @startdate datetime DECLARE @enddate datetimeSET              @idlounge Erreur inconnu lors d'une requete d'ajout [ par alucard02 ] BonjourJe bloque devant cette requette simple qui permet l'enregistrement de nouveaux membres :$q1 = "insert into classmates_members set              


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Appels d'offres

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.