IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

problème constainstable et procédure stockée


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 20
    Points : 16
    Points
    16
    Par défaut problème constainstable et procédure stockée
    Bonjour
    J'ai un problème avec le paramètre et constainstable dans un proc quand le paramètre contient plusieurs mots "pompe à chaleur" par exemple.
    il faut les ", j'utilise la fonction quotename sur le paramètre.
    Ca marche.
    mais quand j'ai voulu utiliser la forme canonique FORMSOF (INFLECTIONAL, @variable) ça me ressort tous les enregistrements
    Où placer les ' et les ", je tourne en rond.
    Dans l'analyseur de requète
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select top 100 percent * from vste_recherche_complet 
    where (idste in 
    ( 
    SELECT ste.idste 
    FROM STEPRODUITS AS STE INNER JOIN 
    CONTAINSTABLE (STEPRODUITS, *, 
    'FORMSOF (INFLECTIONAL,"pompes à chaleur" )' , 20 
    ) AS KEY_TBL 
    ON STE.IDSTE = KEY_TBL.[KEY] 
    )
    marche mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE procedure [dbo].[sprech_ 
    @recherche varchar(256), 
    @nbr int=20 
    AS 
    declare @@recherche varchar(256) 
    select @@recherche=quotename(@recherche,'"') 
     
    Select top 100 percent * from vuecomplet 
    where (idste in 
    ( 
    SELECT ste.idste 
    FROM STEPRODUITS AS STE INNER JOIN 
    CONTAINSTABLE (STEPRODUITS, *, 
    'FORMSOF (INFLECTIONAL,@@recherche )',@nbr ) AS KEY_TBL 
    ON STE.IDSTE = KEY_TBL.[KEY] 
    )
    me retourne n'importe quoi.

    si quelqu'un peut me donner un conseil il sera le bienvenu.
    dm

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    C'est normal que cela ne fonctionne pas, puisque vous avez écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'FORMSOF (INFLECTIONAL,@@recherche )'
    Vous passez donc comme prédicat les formes fléchies de @@recherche
    Je ne vous conseille pas de nommer vos variables avec deux @@, car certaines fonctions de SQL Server portent le même préfixe.

    Vous pouvez par exemple écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT @recherche = QUOTENAME(@recherche,'"')
    Avez-vous essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    CREATE PROCEDURE [dbo].[sprech_]
    	@recherche VARCHAR(256),
    	@nbr INT = 20
    AS
    BEGIN
    	DECLARE @predicatFTS VARCHAR(512)
    	SELECT @predicatFTS = 'FORMSOF (INFLECTIONAL,' + QUOTENAME(@recherche,'"') + ')'
     
    	SELECT TOP 100 PERCENT *
    	FROM dbo.vuecomplet AS VC
    	JOIN dbo.STEPRODUITS AS STE
    		ON VC.idste = STE.idste
    	JOIN CONTAINSTABLE
    		(
    			STEPRODUITS,
    			*,
    			@predicatFTS,
    			@nbr
    		) AS KEY_TBL
    	ON STE.IDSTE = KEY_TBL.[KEY]
    END
    @++

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 20
    Points : 16
    Points
    16
    Par défaut Un grand merci
    Merci bien pour l'aide, ça marche !
    je donne le code complet de la procédure bien qu'elle soit spécifique à ma configuration. elle fait appel à une vue qui permet d'effectuer les liaisons entre les différentes tables et 2 catalogues de texte intégral sur 2 tables qui contiennent les infos sur l'activité, les produits, services, marques et autres informations.

    La procédure permet des recherche du type : pompe à chaleur+maintenance
    en trouvant toutes les occurences quelque soit leur orthographe.
    Le traitement peut considérer un 'mot' (panneaux solaire) par exemple ou 2 mots reliés par +
    Je cherche un moyen pour permettre l'emploi de +, x ou - comme liaison pour traiter AND, OR et NOT mais je ne suis pas encore au bout du problème, pour l'instant je ne traite que AND et seulement 1 liaison.

    Encore merci pour votre aide.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    CREATE procedure [dbo].[sprech_all]
    @recherche varchar(256),
    @nbr int=20 /* nombre de resultats remonté par CONTAINSTABLE
     
    AS
    BEGIN
     
    DECLARE @predicatFTS VARCHAR(512)
    DECLARE @nb int
    SET @nb=charindex('+',@recherche)
    if @nb >0
    BEGIN
    DECLARE @st1 varchar(64)
    DECLARE @st2 varchar(64)
    SET @st1=substring(@recherche,1,@nb-1)
    SET @st2=substring(@recherche,@nb+1,len(@recherche)-@nb)
    SELECT @predicatFTS = 'FORMSOF (INFLECTIONAL,' + QUOTENAME(@st1,'"') + ') AND FORMSOF (INFLECTIONAL,' + QUOTENAME(@st2,'"') + ')'
    END
    else
    BEGIN
    SELECT @predicatFTS = 'FORMSOF (INFLECTIONAL,' + QUOTENAME(@recherche,'"') + ')'
    END
    		Select  top 100 percent * from vste_recherche_complet as VC
    		where 
    		(idste in 
    		(
    		SELECT ste.idste
    		FROM STEPRODUITS AS STE INNER JOIN
    		   CONTAINSTABLE (STEPRODUITS, *, 
    		     @predicatFTS , @nbr
    		   ) AS KEY_TBL
    		   ON STE.IDSTE = KEY_TBL.[KEY]
    		)
    		OR
    		 idste in 
    		(
    		SELECT ste.idste
    		FROM STEactiv AS STE INNER JOIN
    		   CONTAINSTABLE (STEactiv, *, 
    		     @predicatFTS , @nbr
    		   ) AS KEY_TBL
    		   ON STE.IDSTE = KEY_TBL.[KEY]
    		))
     
     
    		order by actif DESC , premium desc
    END

Discussions similaires

  1. Problème sur une procédure stockée
    Par jolio2006 dans le forum PL/SQL
    Réponses: 6
    Dernier message: 17/11/2008, 18h55
  2. Petit problème avec une procédure stockée
    Par Poulain dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/05/2007, 18h58
  3. [VB.NET 2.0] - Problème avec une procédure stockée
    Par Khrysby dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/05/2007, 15h25
  4. Réponses: 3
    Dernier message: 11/07/2006, 16h32
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo