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

Langage SQL Discussion :

Procedure stcokee : construction de requete dans une variable


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 46
    Points : 23
    Points
    23
    Par défaut Procedure stcokee : construction de requete dans une variable
    bonjour,

    Je sèche

    J'ai une procédure stockée qui est de la sorte :

    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
     
    alter proc toto (@test varchar(50) )
    as
    begin
     
    if @test='v1' 
    begin
    set @test=' ''3%'' and champ2 not like ' ' 10% '' '
    else
    begin
    set @test='%'
    end
    create table #data(champ5 as varchar(50))
    declare @chaine as nvarchar(500)
    set @chaine= 'select * from ma_table where champ1 like '' ' + @test + '''
    select * from #data
    end
    mais lorsque que @test vaut v1 et que normalement ça doit m'exécuter la requête ça me remplit ma table de NULL...quand @test vaux '%' ça fonctionne !

    je vois pas pourquoi

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    vous faites des begin sans end et ça marche ???

    A +

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 46
    Points : 23
    Points
    23
    Par défaut
    Voilà la procedure stockée avec le END ( je l'avais créee pour l'exemple )
    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
     
     
    create proc toto (@test varchar(50) )
    AS
    begin
     
    IF @test='v1' 
    begin
    SET @test=' ''3%'' and champ2 not like ''10%'' '
    end
    else
    begin
    SET @test='%'
    end
     
    CREATE TABLE #data  (mon_champ  varchar(50))
    declare @chaine AS nvarchar(500)
    SET @chaine= 'select * from ma_table where equipe like ' + @test + ''
    select * from #data
    end
    Lorsque je lance : exec toto @test='V1' ça ne met pas d'erreur
    j'ai bien dans la variable @test : '3%' and champ2 not like '10%'

    donc la requête est bien complète est devrait pouvoir s'executer non ?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    je ne voit pas l'exécution de cette chaine !

    A +

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 46
    Points : 23
    Points
    23
    Par défaut
    autant pour moi c'est la version que je viens de tester ça avec un sp_executesql mais sans succès !

    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
     
    CREATE proc toto (@test varchar(50) )
    AS
    begin
     
    IF @test='v1' 
    begin
    SET @test=' ''3%'' and champ2 not like ''10%'' '
    end
    else
    begin
    SET @test='%'
    end
     
    CREATE TABLE #data  (mon_champ  varchar(50))
    declare @chaine AS nvarchar(500)
    insert into #data
    select champ1 from ma_table where equipe like ' + @test + '
    SELECT * FROM #data
    end

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Citation Envoyé par goofer Voir le message
    autant pour moi c'est la version que je viens de tester ça avec un sp_executesql mais sans succès !
    Tu l'as mis où ton sp_executesql ? Parce qu'on ne le voit pas dans le code...

    La syntaxe, c'est sp_executesql @TaChaineSQLQueTuAsConstruite.

    Donc, le mieux c'est de construire la chaîne et la stocker dans une variable, exécuter avec spexecutesql, et si ça marche pas debugger d'une manière ou d'une autre pour visualiser la valeur de cette variable au moment de l'exécution...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 46
    Points : 23
    Points
    23
    Par défaut
    en fait sp_executesql je ne 'peux pas' m'en servir.
    je reprends des proc stockee déjà écrites.

    la procédure stockée à pour argument des paramètres qui permettent de construire la requête alter ptoc toto ( @Arg1, @arg2 )

    et dans la requetête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT @value = champ1 FROM ma_table WHERE equipe LIKE ' + @Arg1 + ' and flag=0 '
    lorsque @Arg1 vaux 'TOTO' ça fonctionne
    lorsque @Arg1 vaux ' 'toto' and not like 'titi'' ça ne fonctionne plus

    la requete s'execute mais je n'ai pas de sortie d'erreur

Discussions similaires

  1. Comment insérer les valeurs d'une requete dans une variable tableau
    Par uptoditime dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/12/2007, 12h03
  2. affecter la valeur d'une requete dans une variable (VB6)
    Par josémaria dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/03/2007, 14h19
  3. Comment stocker requete dans une variable ?
    Par innova dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/11/2006, 08h00
  4. Réponses: 5
    Dernier message: 08/08/2006, 00h02
  5. Réponses: 7
    Dernier message: 02/05/2006, 16h28

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