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

MS SQL Server Discussion :

Pb script sql


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Par défaut Pb script sql
    Bonjour,

    J'ai 2 tables (base Sql Server 2000) qui n'ont pas de lien:
    table 1(id_1,...,champ1)
    table 2(id_2, valeur)

    Je voudrais recuperer dans ma table 1 tous les enregistrements qui contiennent dans le champ1 la clé id_2 de la table 2, avec comme paramètre de départ le champ valeur.
    Je suis parti sur un script du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    declare @monid_2 uniqueidentifier
    set @monid_2 = (select id_2 from table 2 where valeur='TOTO')
     
    select * from table 1
    WHERE champ1 like '%'& @monid_2 &'%'
    Mais cela ne marche pas.

    Merci d'avance de votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Par défaut
    J'ia oublié qqchosde d'important à dire :
    id_2 est de type uniqueidentifier
    champ1 est de type text
    D'où un pb de compararison de type surement.

    En plus '@monid_2' me renvoie un GUID, or dans mon champ 'champ1' j'ai des références non pas au GUID entier mais à sa valeur entre crochets (ex : GUID={B200....} et dans champ1='emplacement=B200....'.

    Enfin je pense que c'est plutot que dans le LIKE.

  3. #3
    Membre expérimenté Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Par défaut
    en principe ça ça devrait fonctionné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select 
      table1.*
    From 
      table1
      Inner Join table2
        On table1.champ1 like ('%' + Cast(table2.id_2 as varchar(30)) + '%')
     Where
      table2.valeur = 'TOTO'
    Mais par contre ce que je ne comprend pas c'est l'histoire des {}
    GUID={B200....} et dans champ1='emplacement=B200....'.
    quand je fait un il me renvoi un uniqueidentifier, mais je ne vois pas de {} ???
    tu pourrais être plus précis ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Par défaut
    En fait je m'ne suis sorti avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    declare @monid_2 varchar(255);
    SET @monid_2 = (SELECT convert(varchar(255),id_2) FROM TABLE 2 WHERE valeur='TOTO')
     
    SELECT * FROM TABLE 1
    WHERE champ1 LIKE '%'& @monid_2 &'%
    L'histoire des accolades venait que qq j'ovrais la table via Entreprise Manager le champ GUID apparait avec des {}.Mais quand je fais une requete ils n'apparaissent plus.

    Par contre j'ai un autre souci. Je souhaiterai selectionner les enregistrements qui contiennent dans le champ 'champ1' plus de 2 fois la valeur @monid_2.
    Comment faire? Je cherche une fonction pour calculer le nb d'occurence (comme instr je crois en vb) mais je ne trouve pas.

  5. #5
    Membre expérimenté Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Par défaut
    Tu peux utiliser pour cela la fonction charindex
    charindex te renvoi la position d'une chaine dans une autre.
    De plus tu peux préciser une position de départ dans la chaine
    Dans ta fonction, tu fais une 1er recherche de la chaine (à partir du début)
    Si trouvé, tu fait une rechercher après la position renvoyé par la 1er recherche
    ex (recherche de 2 ou plus d'occurence de "aze" dans un champ text):
    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
     
    Create table tst (a int, b text)
    Insert into tst values(1, 'azerty')
    Insert into tst values(2, 'azertyazerty')
    Insert into tst values(3, 'toto')
    go
    Declare 
    	@recherche varchar(10)
    Set @recherche = 'aze'
     
    Select 
    	*
    From tst
    Where
    	(Case When charindex(@recherche, b) >0 then charindex(@recherche, b, charindex(@recherche, b)+1) else -1 end ) >0

Discussions similaires

  1. Execution d'un script SQL
    Par Drahu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/03/2004, 16h55
  2. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 13h57
  3. Exécuter un script SQL
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/03/2004, 08h47
  4. create user, affectation droits et scripts sql
    Par hirochirak dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/02/2004, 10h21
  5. script SQL : affectation de variables
    Par Laura dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/10/2003, 21h32

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