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 :

S'assurer de la fin d'insert ?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 87
    Par défaut S'assurer de la fin d'insert ?
    Bonjour,

    J'ai un script qui me permet de faire plusieurs INSERT dans différentes tables et j'aimerais m'assurer que lorsque commence un INSERT le premier soit fini.

    Je ne peux pas utiliser GO car je déclare une variable au début de mon script.
    Sinon il faudrait que je déclare cette variable avant chaque INSERT.

    Comment puis je faire ?

    Exemple de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Declare @variable 
    set @variable = 2
     
    set indentity_insert toto on
    INSERT ...
    set indentity_insert toto off
     
    set indentity_insert tata on
    INSERT ...
    set indentity_insert tata off
     
    ...

  2. #2
    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,

    Il n'y a pas besoin de s'en assurer puisque les instructions sont implicitement exécutées comme transactions dans l'ordre où vous les spécifiez.

    @++

  3. #3
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 87
    Par défaut
    Ha ok ... bizarre puisque j'ai eu une erreur d'insertion de donnée à cause d'une FK qui correspondait à l'insertion d'avant sachant que celle ci s'était bien passé.

    Et en reprenant juste l'insertion qui plantait et en l’exécutant dans une autre fenêtre je n'ai pas eu de soucis ...

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Est ce que tu peux nous donner la définition des tables ainsi le code que tu exécutes et qui poserait problème ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 87
    Par défaut
    Alors voici les tables qui posent problème.
    Tout d'abord le script de création de ces 2 tables, sans compter les index.

    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
     
    create table Donnee
     (
       IdDonnee int identity(1,1),
       ValeurChaine nvarchar(255) null,
       ValeurEntier int null,
       ValeurReel float(13) null,
       ValeurBooleen bit null,
       constraint PK_Donnee primary key (IdDonnee)
     ) 
    go
     
    create table Famille
     (
       IdFamille int identity(1,1),
       IdDonneeLibelle int not null,
       Nom nvarchar(50) not null,
       constraint PK_Famille primary key (IdFamille)
     ) 
    go
    La Foreign Key correspondante, sur celle ou j'ai un soucis lors de l'insertion des données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    alter table Famille 
         add constraint FK_Famille_Donnee foreign key (IdDonneeLibelle) 
                   references Donnee (IdDonnee)
    go
    Le script me permettant d’insérer les données :
    Pour info je vais chercher les données sources sur un serveur lié que je rapatrie ensuite sur ma base locale.
    J'ai pas mal de table remplie de cette manière ...

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
     
    /* Import de la donnée servant de libellé */
    set identity_insert Donnee on
     
    	insert into Test.dbo.Donnee (
    		IdDonnee, 
    		ValeurBooleen, 
    		ValeurChaine, 
    		ValeurEntier, 
    		ValeurReel
    	)
    	select distinct(IDDonnee), ValeurBooleen, ValeurChaine, ValeurEntier, ValeurReel 
    	from ServLie.BaseSource.dbo.Donnee d
    	inner join ServLie.BaseSource.dbo.Famille f on f.IDDonneeLibelle = d.IDDonnee
    	inner join ServLie.BaseSource.dbo.ProduitPays pp on pp.IdFamille = f.IdFamille
    	inner join ServLie.BaseSource.dbo.ProduitPaysProduitClient pppc on pppc.IDProduitPays = pp.IDProduitPays
    	where pppc.IDProduitClient = @idProduitClient
    	and f.IDDonneeLibelle not in (
    		select IdDonnee 
    		from Test.dbo.Donnee
    	)
     
    IF @@ERROR <> 0
        PRINT N'ERREUR : Donnee - Famille '
    ELSE 
    	PRINT N'TABLE : Donnee - Famille -> OK'
     
    set identity_insert Donnee off
     
    /* Import de la Famille */
    set identity_insert Famille on
     
    	insert into Test.dbo.Famille (
    		IdFamille,
    		IdDonneeLibelle,
    		Nom
    	)
    	select distinct(f.IdFamille), f.IDDonneeLibelle, f.Nom
    	from ServLie.BaseSource.dbo.Famille f
    	inner join ServLie.BaseSource.dbo.ProduitPays pp on pp.IdFamille = f.IdFamille
    	inner join ServLie.BaseSource.dbo.ProduitPaysProduitClient pppc on pppc.IDProduitPays = pp.IDProduitPays
    	where pppc.IDProduitClient = @idProduitClient
    	and f.IdFamille not in (
    		select IdFamille 
    		from Test.dbo.Famille
    	)
     
    IF @@ERROR <> 0
        PRINT N'ERREUR : Famille '
    ELSE 
    	PRINT N'TABLE : Famille -> OK'
     
    set identity_insert Famille off

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Je pense qu'il faut que tu commences par des insert dans la table famille avant de faire des insert dans la table donnes.
    C'est ca ton problème.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/11/2007, 18h51
  2. Réponses: 2
    Dernier message: 25/05/2006, 19h56
  3. liste chainée et insertion en fin ou debut
    Par bonjour69 dans le forum C
    Réponses: 7
    Dernier message: 21/12/2005, 20h50
  4. Insertion en début et non en fin de base ?
    Par sourcelab dans le forum Requêtes
    Réponses: 6
    Dernier message: 12/10/2005, 14h23
  5. INSERTION / tri ascendant ou descendant, ou mettre a la fin
    Par oravelon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/08/2005, 11h15

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