begin process at 2010 02 10 04:38:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive SQL

 > 

Archives

 > 

Problème avec une fonction

 > 

Je n'arrive pas à optimiser ma fonction


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Je n'arrive pas à optimiser ma fonction

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ée 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);  A Propos de EncryptByPassPhrase [ par 3KyNoX ] Bonjour.Voici une question un peu bête mais j'utilise donc EncryptByPassPhrase pour crypter le contenu d'une textox de type password en ASP.NeT dont v ERREUR ERNO 150 CLE ETRANGERE [ par didygwatinik ] Bonjour, J'ai une erreue dans la création de ma table notertexte, apparement c'est un problème avec les clés étrangères : j'obtiens l'erreur : Can't c Sélectionner le max d'une VarChar [ par PatBlarg ] Bonjour, j'ai un gros problème de requête SQL. Plutôt 2 même...J'ai un logiciel qui écrit des donnée numérique dans une base de donnée SQL.Dépendant d probleme pour creer le contenu de ma base de donne [ par laloire33150 ] voici mon soucis, je travail avec phpmyadmin et je rentre ma requete dans une fenetre sql et voici l'erreur qu'elle me sort : requête SQL: -- ----- je ne comprend pas ou est le probleme [ par laloire33150 ] Erreur requête SQL: CREATE TABLE annu( id int NOT NULL AUTO_INCREMENT , date varchar( 20 ) NOT NULL , auteur varchar( 50 ) NOT NULL , ns varchar( 5 Contrainte bizarre [ par arpala ] Bonjour à tous,Alors voila, pour m'entrainer je m'amuse à créer des tables dans une base de donnée.Mais la je tombe sur un os.Primo mon fichier texte passage de parametre date [ par JJAIOLI ] Bonjour, je souhaite utiliser une variable date dans mes requêtes SQL au sein d'un script shell, mais j'ai une erreur ORA-00904: "DATE_PARAMETRE": inv


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales