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 :

Commit et cursor [2000]


Sujet :

Développement SQL Server

  1. #1
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Par défaut Commit et cursor
    Bonjour,

    Voila quelque jours que je sèche sur un problème.

    PS je suis en SQL SERVER 2000 pour mon plus grand malheur.

    Dans mon application, je dois transférer des données en mes tables fronts et mon middle office. Rien de bien difficile.
    En trois instructions c'était fait.

    Mais depuis peu il y a des erreurs qui survienne pendant le l'insertion qui bloc tout le transfert.
    Je dois donc logger les lignes qui font ****.
    A partir de la je bloque.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    SET CURSOR_CLOSE_ON_COMMIT OFF
    DECLARE @var as varchar(20)
    DECLARE KEY_Cursor CURSOR FOR 
    	SELECT maKey FROM ...
     
    OPEN KEY_Cursor;
    Print 'open curseur' 	
    FETCH NEXT FROM KEY_Cursor  
    INTO @var
    Print 'Fetch into done' 	
     
    WHILE @@FETCH_STATUS = 0
    	BEGIN
    	BEGIN TRAN	
    	SET @err=0
     
    	INSERT Commande
    	SET @err = @@ERROR
     
    	IF @err <> 0 
    	BEGIN
    		ROLLBACK TRAN 
    		SET @nbErr = @nbErr + 1
    		INSERT INTO TAB_LOG
    		FETCH NEXT FROM KEY_Cursor INTO @var
    		CONTINUE
    	END
     
    	INSERT Article
    	SET @err = @@ERROR
     
    	IF @err <> 0 
    	BEGIN
    		ROLLBACK TRAN 
    		SET @nbErr = @nbErr + 1
    		INSERT INTO TAB_LOG
    		FETCH NEXT FROM KEY_Cursor INTO @var
    		CONTINUE
    	END
     
    	INSERT Livraison
    	SET @err = @@ERROR
     
    	IF @err <> 0 
    	BEGIN
    		ROLLBACK TRAN 
    		SET @nbErr = @nbErr + 1
    		INSERT INTO TAB_LOG
    		FETCH NEXT FROM KEY_Cursor INTO @var
    		CONTINUE
    	END
     
    	COMMIT TRANSACTION 
     
    	FETCH NEXT FROM KEY_Cursor 
    	INTO @var
    END
     
    CLOSE KEY_Cursor;
    DEALLOCATE KEY_Cursor;
    SET CURSOR_CLOSE_ON_COMMIT ON


    Pour pouvoir savoir quel ligne me bloque je suis bien obliger de passer par un curseur non ?


    Après mon problème actuel c'est que lorsque je commit dans mon curseur les lignes valides, il se ferme au premier COMMIT, j'ai lu sur internet que c'était un comportement normal.
    J'ai donc essayé de faire des SAVE TRAN les lignes valide et de COMMIT une fois sortie de mon WHILE mais il me dit que la TRANSACTION n'existe pas.

    Bref je suis pas assez calé en SQL. On m'a toujours dit que les Curseur c’était le mal et après toutes les page que je lis depuis 2 jours j'ai encore plus de raison de le croire mais la je ne vois pas comment faire autrement.

    Sur ce merci d'avance pour vos propositions.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Par défaut
    Bon bas j'ai trouvé la solution.

    J'ai créé une proc stock qui s'occupe de tous mes Insert avec le BEGIN/ROLLBACK/COMMIT, qui est appelé dans mon curseur.
    Le curseur n'est pas fermé sur un rollback/COMMIT et j'ai le comportement souhaité.

    Après si vous avez des idées ou des remarques pour mon traitement n'hésitez pas .

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

Discussions similaires

  1. [C#] histoire de commit et de roolback
    Par dupin40 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 18/05/2021, 17h45
  2. Interbase en réseau:commit ne s'appliquent pa aux autres pc?
    Par Harry dans le forum Bases de données
    Réponses: 9
    Dernier message: 27/05/2004, 14h10
  3. read committed, serializable... et par défaut k'en est-il?
    Par superdada dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 01/12/2003, 18h58
  4. Query Begin et Commit son sur un bateau....
    Par faoz75 dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/08/2003, 11h48
  5. commit et rollback....?
    Par The_Nail dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/06/2003, 14h36

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