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 :

[Procs stockées] [Débutant] Requête dynamique


Sujet :

MS SQL Server

  1. #1
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut [Procs stockées] [Débutant] Requête dynamique
    Salut,

    je suis débutant en procédure stockée, et je ne sais pas si ce que je veux faire est possible.. M'enfin je pose la question quand même :
    Voici le code ma proc stockée :

    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 PROCEDURE UserAvocat.ContactSociete
    (
    	@NomContact    nvarchar(50),
    	@client 	 bit,
    	@interne	 bit,
    	@partenaire	 bit,
    	@intervenant	 bit,
    	@adverse	 bit,
    	@autre 		 bit
    )
     AS
     
    SELECT     tbl_contacts.ID, tbl_contacts.condition, tbl_contacts.nom, tbl_contacts.prenom, tbl_societes.ID AS id_societe, 
                          tbl_societes.nom AS societe, tbl_contacts.tel_perso, tbl_contacts.email, tbl_contacts.mission_contact
    FROM         tbl_contacts LEFT OUTER JOIN
                          tbl_societes ON tbl_contacts.ID_tbl_societes = tbl_societes.ID
    WHERE     (tbl_contacts.nom LIKE @NomContact+'%') 
     
    GO
    voila,
    donc la question :
    comment maintenant dire après la clause WHERE de cette requête :

    SI @client = 0 alors écrire 'AND mission_contact <> 1'
    SI @interne= 0 alors écrire 'AND mission_contact <> 2
    ...
    Merci pour vos réponses,

    A++
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145

  3. #3
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut
    mmm , je faisais bien une concaténation mais je ne savais pas qu'il fallait
    exécuter comme ceci :

    Exec (@chaine_sql_concaténée)

    Merci beaucoup
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 220
    Points : 19 549
    Points
    19 549
    Billets dans le blog
    25
    Par défaut
    Dans la mesure du possible, évitez cette saloperie de SQL dynamique...
    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
     
    CREATE PROCEDURE UserAvocat.ContactSociete
    &#40;
       @NomContact    nvarchar&#40;50&#41;,
       @client     bit,
       @interne    bit,
       @partenaire    bit,
       @intervenant    bit,
       @adverse    bit,
       @autre        bit
    &#41;
     AS
     
    SELECT     tbl_contacts.ID, tbl_contacts.condition, tbl_contacts.nom, tbl_contacts.prenom, tbl_societes.ID AS id_societe,
               tbl_societes.nom AS societe, tbl_contacts.tel_perso, tbl_contacts.email, tbl_contacts.mission_contact
    INFO #T
    FROM        tbl_contacts LEFT OUTER JOIN
                          tbl_societes ON tbl_contacts.ID_tbl_societes = tbl_societes.ID
    WHERE     tbl_contacts.nom LIKE @NomContact+'%'
     
     
    IF @client = 0
       DELETE #T where mission_contact = 1
     
    IF @interne= 0 alors écrire 
       DELETE #T where mission_contact = 2
     
    SELECT * FROM #t
     
    DROP TABLE #T
    GO
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  5. #5
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut
    Ah ben oui bien sur !

    Alors la, c'est hors de question que je fasse un truc pareil !

    Voici ce que j'ai fait... Je sais pas si c'est correct mais en tout cas, je pense que c'est mieux qu'avec les DELETE : )))
    Peux-tu me dire si c'est bien ?

    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
     
    CREATE PROCEDURE UserAvocat.ContactSociete
    	@nom   	 nvarchar&#40;50&#41;,
    	@client 	 smallint,
    	@interne	 smallint,
    	@partenaire	 smallint,
    	@intervenant	 smallint,
    	@adverse	 smallint,
    	@autre 		 smallint
     AS
     
    declare @sql   nvarchar&#40;300&#41;
    declare @tout nvarchar&#40;1500&#41;
     
    SET @sql= ' '
    IF &#40;@client&#41; = 1 SET @sql = @sql+ ' OR tbl_contacts.mission_contact = 1 '
    IF &#40;@interne=1&#41; SET  @sql = @sql+ ' OR tbl_contacts.mission_contact = 2 '
    IF &#40;@partenaire=1&#41; SET @sql = @sql+ ' OR tbl_contacts.mission_contact = 3 '
    IF &#40;@intervenant=1&#41; SET @sql = @sql + ' OR tbl_contacts.mission_contact = 4 '
    IF &#40;@adverse=1&#41; SET @sql = @sql + ' OR tbl_contacts.mission_contact = 5 '
    IF &#40;@autre=1&#41; SET @sql = @sql + ' OR tbl_contacts.mission_contact = 6 '
     
    SET @tout = ' SELECT  tbl_contacts.ID, tbl_contacts.condition, tbl_contacts.nom, tbl_contacts.prenom, tbl_societes.ID AS id_societe,  
    tbl_societes.nom AS societe, tbl_contacts.tel_perso, tbl_contacts.email, tbl_contacts.mission_contact 
    FROM   tbl_contacts LEFT OUTER JOIN tbl_societes ON tbl_contacts.ID_tbl_societes = tbl_societes.ID 
    WHERE  &#40;tbl_contacts.nom LIKE '''+@nom+'%''&#41; AND &#40;tbl_contacts.mission_contact = 0  '+@sql+'&#41;'
     
    EXEC &#40;@tout&#41;
    GO
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

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

Discussions similaires

  1. [Proc Stockée] CURSOR dynamique
    Par psykoleouf dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/02/2008, 16h05
  2. [Proc Stock]Création d'un curseur en SQL dynamique
    Par marsup54 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/06/2006, 15h02
  3. [SQL_SVR_2K]Proc Stockée Dynamique
    Par Franck2mars dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/05/2006, 11h17
  4. [Débutant] Problème avec les paramètres d'une proc stockée
    Par babulior dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/06/2005, 16h38
  5. Recopie de procs stocks dynamiques entre serveurs
    Par Chevalier Bayard dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/06/2005, 12h29

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