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 :

[proc stock] variable dans sous requête


Sujet :

MS SQL Server

  1. #1
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut [proc stock] variable dans sous requête
    salut,
    J'essaie de faire une procédure stockée qui contient une sous requête avec une variable. Mais j'ai un message d'erreur disant que la syntax n'est pas correcte:
    Msg 102, Level 15, State 1, Procedure GetLastPublications, Line 19
    Incorrect syntax near '@num'.
    c'est le @num dans le select TOP... qui pose problème.

    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
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
    CREATE PROCEDURE GetLastPublications 
    	@num int = 5, 
    	@type varchar(255) = "Peer reviewed Journal Article"
    AS
    BEGIN
     
    	SET NOCOUNT ON;
     
    	SELECT * FROM Publication 
    	WHERE ID IN 
    		(SELECT TOP @num ID FROM Publication ORDER BY ID DESC)
    	AND TypeName IN (@Type)
    	ORDER BY ID DESC
    END
    GO
    merci pour vos conseils

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP (@num) ID ...
    Attention aussi au IN(), tu ne peux pas mettre une liste dans la variable

  3. #3
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    Merci pour ta réponse.
    Attention aussi au IN(), tu ne peux pas mettre une liste dans la variable
    tu fais référence à la variable @type, n'est ce pas?
    En fait, quels sont les types que l'on peut utiliser pour des variables dans une procédure stockée? Peut-on utiliser Array ou List?
    Sinon, existe t-il un moyen de faire un IN sur une variable?

    merci pour vos conseils

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    jusqu'à SQL Server 2005, vous pouvez utiliser tous les types, qui ne contiennent pas le type TABLE.

    Dans la requête de votre procédure stockée, je crois que vous pouvez écrire :

    Pourquoi n'avez vous pas écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP (@num) maListeDeColonnes
    FROM Publication 
    WHERE TypeName = @Type
    ORDER BY ID DESC
    ?

    A+

  5. #5
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    J'ai modifié un peu le procédure stockée selon vos conseils,
    Mais en revanche, je souhaite utiliser IN pour le champ TypeName. Du coup j'ai modifié la procédure comme ça :

    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
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
     
    ALTER PROCEDURE [dbo].[GetLastPublications] 
    	-- Add the parameters for the stored procedure here
    	@num int = 5,
    	@type1 varchar(255) = "'Peer reviewed Journal Article', 'Book Chapter'"
    AS
    BEGIN
     
    	SET NOCOUNT ON;
     
    	SELECT ReferenceHTML, Title FROM Publication 
    	WHERE 
    		ID IN (SELECT TOP (@num) ID FROM Publication WHERE TypeName IN ( (@type1) ) ORDER BY ID DESC)
    	ORDER BY ID DESC
    END
    cette requête ci-dessus fonctionne mais ensuite je ne sais pas comment formater la chaine de caractère à passer à la variable @type1.
    De cette façon : "'Peer reviewed Journal Article', 'Book Chapter'"
    ça ne fonctionne pas sûrement à cause des guillemets

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    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 896
    Points : 53 130
    Points
    53 130
    Billets dans le blog
    6
    Par défaut
    cela ne marchera pas plus. Une variable étant un type scalaire, le IN cherchera un "TypeName" qui est : Peer reviewed Journal Article', 'Book Chapter

    je doute que ce soit ce que vous cherchiez !

    A +

  7. #7
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    le IN cherchera un "TypeName" qui est : Peer reviewed Journal Article', 'Book Chapter
    Effectivement, ce n'est pas ce que je recherche.
    Existe t-il un moyen de faire un IN sur une variable. Si oui de quel type doit être cette variable?

Discussions similaires

  1. Passer une variable dans une requête SQL
    Par Remedy dans le forum C++
    Réponses: 2
    Dernier message: 11/05/2006, 16h48
  2. [VBA-A]Variable dans la reqêute d'un list box
    Par benjapar dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/05/2006, 17h45
  3. [PL/SQL] [9i] Variables dans une requête
    Par ftrifiro dans le forum Oracle
    Réponses: 6
    Dernier message: 07/02/2006, 12h19
  4. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02
  5. Passage de variable dans une requête
    Par zestrellita dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/09/2004, 13h27

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