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 :

Utilisation de IN dans une procédure stockée


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 817
    Billets dans le blog
    2
    Par défaut Utilisation de IN dans une procédure stockée
    bonjour a tous
    premièrement désole pour cet intitule de topic très vague. Deuxièmement merci par avance a ceux qui pourront me venir en aide
    j'ai une demande qui consiste a faire encapsuler cette requête dans une procédure Stocké
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT     ActDevList.CompName, ActDevList.CompID, ComponentTrace.LotNo, ActDevList.McID
    FROM         ActDevList INNER JOIN ComponentTrace ON ActDevList.CompID = ComponentTrace.CompID
    WHERE     (ActDevList.McID IN ( )) AND (ActDevList.Status = '0')
    ce qui inquiétée c'est le nbre du variable entre les deux parenthésé de IN car il est parfois deux entré et parfois plus de 10 entré
    j'ai envoyer cette procédure
    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
    USE [vmanage_u2]
    GO
     
    /****** Object:  StoredProcedure [dbo].[Getval_cID]    Script Date: 12/11/2015 16:00:12 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
     
    create procedure [dbo].[Getval_cID]
    ( @McID int  
    )
    AS 
    SET NOCOUNT ON;
    SELECT     ActDevList.CompName, ActDevList.CompID, ComponentTrace.LotNo, ActDevList.McID
    FROM         ActDevList INNER JOIN ComponentTrace ON ActDevList.CompID = ComponentTrace.CompID
    WHERE     (ActDevList.McID = @McID) AND (ActDevList.Status = '0')
    GO
    en essayant de déclarer une seul variable
    qui a une idée a mon besoin merci de me corriger si je dit des bétises
    et merci pour nos expert

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu pourrais utiliser une variable de type Table https://msdn.microsoft.com/fr-fr/lib...=sql.120).aspx

  3. #3
    Membre émérite

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 817
    Billets dans le blog
    2
    Par défaut
    Y a til une proposition

    j'ai essayer avec ca mais pas du résultat

    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
     GO
     
    /****** Object:  StoredProcedure [dbo].[Getval_cID]    Script Date: 12/11/2015 16:00:12 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
    IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'Getval_cID')
    DROP PROCEDURE Getval_cID
    GO 
    create procedure [dbo].[Getval_cID]
     @MCID int,
      @SQL NVARCHAR(500)
    AS 
    begin 
    set @MCID = '1,2,3,4'
    SET  @SQL='SELECT     AT.CompName, AT.CompID, CT.LotNo, AT.McID
    FROM         ActDevList AS AT INNER JOIN ComponentTrace AS CT ON AT.CompID = CT.CompID
    WHERE     (AT.McID IN ('+@MCID+')) AND (AT.Status = "0")'
    end

  4. #4
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par abdallah_mehdoini Voir le message
    Y a til une proposition

    j'ai essayer avec ca mais pas du résultat

    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
     GO
     
    /****** Object:  StoredProcedure [dbo].[Getval_cID]    Script Date: 12/11/2015 16:00:12 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
    IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'Getval_cID')
    DROP PROCEDURE Getval_cID
    GO 
    create procedure [dbo].[Getval_cID]
     @MCID int,
      @SQL NVARCHAR(500)
    AS 
    begin 
    set @MCID = '1,2,3,4'
    SET  @SQL='SELECT     AT.CompName, AT.CompID, CT.LotNo, AT.McID
    FROM         ActDevList AS AT INNER JOIN ComponentTrace AS CT ON AT.CompID = CT.CompID
    WHERE     (AT.McID IN ('+@MCID+')) AND (AT.Status = "0")'
    end
    Il y a 3 petits problème dans ton teste.

    Le code n'est pas faux, c'est juste que tu essayes d'insérer dans un champ de type INT un texte. Et pourtant, tu as bien déclaré un varchar(500) en entrée de fonction, que tu n'utilises pas dans la requête en dessous.

    Ensuite, tu déclares une variable d'entrée @SQL, alors qu'elle devrait être dans le corps de la procédure. (c'est pas le plus grave, mais je suis maniaque)

    Pour finir, tu oublies d'exécuter la requête. Quand tu fais du SQL dynamique comme ça. Il te faut ensuite faire un sp_executesql.


    Code sql : 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
    ALTER PROCEDURE [dbo].[Getval_cID]
     @MCID NVARCHAR( 100 )
    AS 
    BEGIN 
    DECLARE @SQL NVARCHAR(500);
     
    SET @MCID = '1,2,3,4'
     
    SET  @SQL = 'SELECT AT.CompName AT.CompID,
           CT.LotNo             ,
    	   AT.McID
      FROM ActDevList AS AT
           INNER JOIN ComponentTrace AS CT ON AT.CompID = CT.CompID
     WHERE AT.McID IN ('+@MCID+')
       AND AT.Status = ''0''';
     
       exec sp_executesql @SQL;
    END
    ceci devrait convenir un peu mieux
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  5. #5
    Membre émérite

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 817
    Billets dans le blog
    2
    Par défaut
    MERCI
    mais pendant l'excution j'ai toujour ce message d'erreur
    Images attachées Images attachées  

  6. #6
    Membre émérite

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 817
    Billets dans le blog
    2
    Par défaut
    je te remercie Lyche

    il est fonctionelle

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    il manque juste une virgule pour séparer les deux première colonnes du SELECT

Discussions similaires

  1. [2012] Utilisation de la clause WHERE CASE WHEN ELSE END dans une procédure stockée
    Par djelloharmel dans le forum Développement
    Réponses: 5
    Dernier message: 23/09/2015, 19h36
  2. Réponses: 8
    Dernier message: 22/07/2015, 08h15
  3. Réponses: 9
    Dernier message: 28/05/2011, 15h47
  4. Réponses: 1
    Dernier message: 12/12/2007, 13h46
  5. Réponses: 6
    Dernier message: 05/04/2007, 13h35

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