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 :

mettre une varaible dans un curseur


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 119
    Par défaut mettre une varaible dans un curseur
    bonjour

    j ai le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    declare toto cursor for 
    select * from (
    select  a,b,c,d,e,DATE
    from cours a, matiere b
    where a.id=b.id
    and heure="30000101"
    and staut=50
    and DATE=@datta
    )T
    where T.COURH<T.COURB
    for read only
    @datta est ma variable seulement je n'arrive pas a la declarer avant le
    declare toto cursor for

    comment puis je la declarer ? dans une variable globale ?
    merci

  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
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    1) Vous utilisez des mots réservé de SQL pour nommer vos colonne. En particulier DATE !
    2) une chaine de caractère se délimite par ' (apostrophe) et non par des guillemets
    3) les jointures se font dans la clause JOIN, pas dena le where

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE @DATA DATETIME;
     
    declare toto cursor FOR 
    SELECT * 
    FROM (SELECT a,b,c,d,e, MADATE
          FROM   cours a
                 INNER JOIN matiere b
                       ON a.id = b.id
          WHERE  heure = '30000101'
            AND staut = 50
            AND MADATE = @DATA) AS T
    WHERE T.COURH < T.COURB
    FOR READ only;
    Commencez donc par apprendre le SQL. Mes livres comme mon site web peuvent sans doute vous être utiles !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 119
    Par défaut
    merci pour ces precieux conseils mais ma requete fonctionne correctement si je met une date a la place de ma variable @datta
    j'utilise transact sql

    et cela ne repond pas a ma question car je ne peux pas declarer ma variable j'ai un message d'erreur si j ecris ce code

    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
     
    declare @datta datetime
    set @datta=convert(char(8),dateadd(day,-0,getdate()),112)
     
    declare toto cursor FOR 
    SELECT * FROM (
    SELECT  a,b,c,d,e,DATE
    FROM cours a, matiere b
    WHERE a.id=b.id
    AND heure="30000101"
    AND staut=50
    AND DATE=@datta
    )T
    WHERE T.COURH<T.COURB
    FOR READ only
    msg 7344, Level 15, State 2:
    Server 'EXPINF', Line 6:
    DECLARE CURSOR must be the only statement in a query batch

    idem si je declare ma variable avant le select

    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
     
    declare toto cursor FOR 
     
    declare @datta datetime
    set @datta=convert(char(8),dateadd(day,-0,getdate()),112)
    SELECT * FROM (
    SELECT  a,b,c,d,e,DATE
    FROM cours a, matiere b
    WHERE a.id=b.id
    AND heure="30000101"
    AND staut=50
    AND DATE=@datta
    )T
    WHERE T.COURH<T.COURB
    FOR READ only

  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
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Il serait peut être temps d'apprendre la SQL parce que là vous êtes loin de comprendre ce que vous tentez de faire !

    La commande DECLARE CURSOR est UNE SEULE ET MÊME COMMANDE !
    Dans votre cas elle débute au declare et se finit au raead only.

    Il ne vous viendrait pas à l'esprit de rajouter une ligne d'une autre commande en plein milieu d'une instruction ??? C'est exactement ce que vous faîtes !!!

    En conclusion votre declaration de variable et son affectation doivent impérativement être fait AVANT le debut du DECLARE toto.

    De plus vous ne respectez toujours pas ce que je vous ais dit précédemment. Êtes vous aveugle ?
    Donc je me répête :
    2) une chaine de caractère se délimite par ' (apostrophe) et non par des guillemets

    Enfin, votre requête dans le curseur est syntaxiquement incorrecte car les colonnes T.COURH et T.COURB ne sont pas récupérée dans la sous requête.

    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
    CREATE TABLE cours (a int, id int, COURH int);
     
    CREATE TABLE matiere (id int, b int,c int,d int,e int, COURB int, heure char(16), MADATE DATETIME, staut int);
     
    DECLARE @DATA DATETIME;
     
    SET @DATA = CURRENT_TIMESTAMP;
     
    declare toto cursor FOR 
    SELECT * 
    FROM (SELECT a,b,c,d,e, MADATE
          FROM   cours a
                 INNER JOIN matiere b
                       ON a.id = b.id
          WHERE  heure = '30000101'
            AND staut = 50
            AND MADATE = @DATA) AS T
    WHERE T.COURH < T.COURB
    FOR READ only;
    Voici ce que donne le lancement de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Serveur : Msg 207, Niveau 16, État 3, Ligne 10
    'COURH' : nom de colonne incorrect.
    Serveur : Msg 207, Niveau 16, État 1, Ligne 10
    'COURB' : nom de colonne incorrect.
    Il serait peut être temps d'apprendre SQL et Transact SQL. Mon site web comme mes bouquins peuvent vous y aider !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 119
    Par défaut
    pas la peine de s'enerver voire d'etre insultant !
    de plus je n'ai jamais dis que je maitrisai le sql ou transact sql !

    ok je suis d'accord avec les points 2 et 3
    mais le point 1 qui consiste a declarer ma variable avant la commande declare cursor je l'ai fait et j'ai ce message d'erreur

    msg 7344, Level 15, State 2:
    Server 'EXPINF', Line 6:
    DECLARE CURSOR must be the only statement in a query batch

    quid ?

  6. #6
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 119
    Par défaut
    je crois que en mettant simplement un

    and DATE=getdate() ca fonctionne

    merci

    a+

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

Discussions similaires

  1. [JSP] mettre une chaine dans un format precis
    Par logica dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/06/2005, 10h21
  2. Réponses: 6
    Dernier message: 14/12/2004, 02h47
  3. Réponses: 5
    Dernier message: 03/02/2004, 14h20
  4. [Drag & Drop] Mettre une fiche dans un panel
    Par corwin_d_ambre dans le forum Composants VCL
    Réponses: 5
    Dernier message: 12/01/2004, 10h46
  5. Peut on mettre une image dans une BD MySQL ?
    Par maddog2032 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/07/2003, 16h18

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