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 :

creer un curseur


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de alex61
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2010
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 378
    Par défaut creer un curseur
    bonjour

    je suis en train de créer un curseur
    qui doit me retourner grace a un select les différentes occurrence séquentiellement ( 1 a 1 )
    et ensuite me permettre grace a ca de faire un UPDATE d'un autre table

    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
    CREATE PROCEDURE dbo.StoredProcedure1 
     
    	@idpalonnier varchar(100),
    	@datetime datetime 
     
    AS
     
    	/* SET NOCOUNT ON */ 
    	DECLARE @numof varchar(50)
     
    	DECLARE C_ech CURSOR
    	FOR
    	SELECT Numof 
    	from ligne_chargement 
    	where id_palonnier = @idpalonnier 
     
    OPEN C_ech
     
    	WHILE @@FETCH_STATUS = 0
    BEGIN
       UPDATE ordre_de_fabrication  
       SET  date_lancement_OF = @datetime , quantite_of =( SELECT DISTINCT SUM(quantiteOF) AS Expr1 
    															FROM ligne_chargement where Numof= @numof )  
        where id_ordre_de_fabrication = @numof
    END
     
    	RETURN
    mais lorsque que je veut enregistrer ,ca m'affiche :

    conflit de types d'opérandes: int est incompatible avec uniqueidentifier
    ps : c'est mon premier curseur sous SQLserver


    merci de votre aide

    cordialement

  2. #2
    Membre très actif
    Avatar de alex61
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2010
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 378
    Par défaut
    mémeprobléme avec ceci :
    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
    CREATE PROCEDURE dbo.StoredProcedure1 
     
    	@idpalonnier varchar(100),
    	@datetime datetime 
     
    AS
     
    	/* SET NOCOUNT ON */ 
    	DECLARE @numof varchar(50)
     
    	DECLARE Section_Cursor CURSOR FOR
    	SELECT Numof from ligne_chargement where id_palonnier = @idpalonnier
     
     
     
    OPEN Section_Cursor
    FETCH Section_Cursor INTO @numof
     
    WHILE @@FETCH_STATUS = 0
    	BEGIN
    	UPDATE ordre_de_fabrication  
       SET  date_lancement_OF = @datetime , quantite_of =( SELECT DISTINCT SUM(quantiteOF) AS Expr1 
    															FROM ligne_chargement where Numof= @numof )  
        where id_ordre_de_fabrication = @numof
    	END
     
    CLOSE Section_Cursor
    DEALLOCATE Section_Cursor
     
    	RETURN

  3. #3
    Membre expérimenté
    Inscrit en
    Juin 2006
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 229
    Par défaut
    Bonjour,

    Juste une chose :
    Oubliez les curseurs.
    Ce n'est pas comme ça qu'on programme en SQL.

    Zabriskir

  4. #4
    Membre très actif
    Avatar de alex61
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2010
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 378
    Par défaut
    le probléme c'est que j'ai pas vraiment le choix

    comment faire autrement ?

  5. #5
    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 : 44
    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
    Par défaut
    Bonjour,

    Zabriski a raison, et je montre ici que pour une requête de base, les curseurs, c'est loin d'être aussi performant qu'une requête SQL.
    SQL est un langage ensembliste, conçu pour traiter les données dans leur ensemble, par dans leurs occurrences comme cela se fait dans la plupart des autres langages.

    Donc, vous avez le choix. Dès SQL Server 2005, vous pouvez écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH
    	CTE AS
    	(
    		SELECT	Numof, SUM(quantiteOF) AS somme_quantiteOF
    		FROM	ligne_chargement
    		WHERE	Numof = @numof
    		GROUP	BY Numof
    	)
    UPDATE		ordre_de_fabrication
    SET		date_lancement_OF = @datetime
    		, quantite_of = C.somme_quantiteOF
    FROM		ordre_de_fabrication AS FO
    INNER JOIN	CTE AS C ON FO.Numof = C.Numof
    Et sous SQL Server 2000 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE		ordre_de_fabrication
    SET		date_lancement_OF = @datetime
    		, quantite_of = C.somme_quantiteOF
    FROM		ordre_de_fabrication AS FO
    INNER JOIN	(
    			SELECT	Numof, SUM(quantiteOF) AS somme_quantiteOF
    			FROM	ligne_chargement
    			WHERE	Numof = @numof
    			GROUP	BY Numof
    		) AS C ON FO.Numof = C.Numof
    Donc dans les deux cas, une seule requête.

    Dans votre requête, le DISTINCT ne sert à rien puisque vous agrégez toute la table.
    Donc vous n'aurez forcément qu'une ligne.

    Votre problème est une erreur de type, qui fera que même les requêtes ci-dessus ne fonctionneront pas.
    Je suspecte WHERE id_ordre_de_fabrication = @numof d'en être à l'origine ...
    Quels est le type de la colonne id_ordre_de_fabrication ?

    @++

  6. #6
    Membre très actif
    Avatar de alex61
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2010
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 378
    Par défaut
    merci de ta réponse , j'essaye ca

    Quels est le type de la colonne id_ordre_de_fabrication ?
    elle est de type : varchar(20)

    cordialement

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

Discussions similaires

  1. [Débutant] Creer une ombre "rectangle" sous mon curseur
    Par Audrey43 dans le forum VB.NET
    Réponses: 3
    Dernier message: 12/03/2012, 09h42
  2. Creer un userform dynamique avec curseur Lien hypertexte
    Par fred65200 dans le forum Contribuez
    Réponses: 1
    Dernier message: 17/05/2009, 11h01
  3. Creer un curseur animé
    Par Speed41 dans le forum Débuter
    Réponses: 0
    Dernier message: 09/03/2009, 17h22
  4. probleme de curseur pour creer une requete
    Par firejocker dans le forum Requêtes
    Réponses: 3
    Dernier message: 27/12/2007, 17h18
  5. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33

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