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 :

SQL dynamique dans une procédure stockée


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 151
    Points
    151
    Par défaut SQL dynamique dans une procédure stockée
    Bonjour à tous !

    J'aimerais créer une procédure stockée qui réalise tout bêtement une requête de selection. Cependant, pour appliquer cette requête à n'importe quelle table de ma base de données, j'ai décidé de lui passer une chaine de caractère comme paramètre qui contiendrait le nom de la table à tester. Pour corser le tout, on peut même imaginer de lui passer une seconde chaine de caractère qui contiendrait le contenu de la clause WHERE.

    J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE PROCEDURE proc_mySelect
    @tableName AS VARCHAR,
    @condition AS VARCHAR
    AS 
    SELECT *
    FROM @tableName
    WHERE @condition
    GO
    Mais SQL SERVER n'a pas l'air d'apprécier puisqu'il me dit : "Erreur 137 : Must declare the variable '@tableName'"
    Que dois-je faire ?

    Merci d'avance pour vos conseils

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 74
    Points : 84
    Points
    84
    Par défaut
    hello,
    je pense qu'il n'aime pas car @TableNAme n'est aps "interprété" automatiquement dans une requete SQL quand il ne s'agit pas d'une valeur mais d'un paramètre.

    Pour du sql dynamique ca devrait marcher ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE PROCEDURE proc_mySelect
    @tableName AS VARCHAR(16),
    @condition AS VARCHAR(64)
    AS
     
    DECLARE @CMD as varchar(512)
     
    SET @cmd='SELECT * FROM ' + @tableName +'WHERE ' +@condition
    EXEC(@cmd)
     
    GO
    par contre un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE PROCEDURE proc_mySelect
    @valueParam AS VARCHAR
    AS
    SELECT * FROM MaTable WHERE MyCol=@valueParam
     
    GO
    devrait fonctionner..

  3. #3
    Membre habitué
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 151
    Points
    151
    Par défaut
    Merci pour l'info, c'était tout à fait ça !

    Bonne journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/09/2008, 17h25
  2. [SQL Server 2005] print dans une procédure stockée
    Par anayathefirst dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 21/03/2008, 15h50
  3. Réponses: 1
    Dernier message: 16/03/2007, 11h46
  4. [SQL-Server] Sous requete dans une procédure stockée
    Par Worldofdada dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/02/2006, 11h18
  5. Appel d'un script SQL dans une procdure stockée
    Par doudou10000 dans le forum Oracle
    Réponses: 10
    Dernier message: 01/12/2004, 10h01

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