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 :

Insertion multiple champ identity


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut Insertion multiple champ identity
    Bonjour,

    J'ai 2 tables :
    TEXTE : (ID_TEXTE int identity, TEXTE varchar(50))
    MAIL : (ID_MAIL int identity, DESTINATAIRE varchar(50), ID_TEXTE int)

    J'aimerais faire une insertion multiple dans mail et texte.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE TABLE @t (TEXTE varchar(50), DESTINATAIRE varchar(50));
    INSERT INTO @t (TEXTE, DESTINATAIRE) VALUES ('txt1', 'adr1@hotmail.com')
    INSERT INTO @t (TEXTE, DESTINATAIRE) VALUES ('txt2', 'adr2@hotmail.com')
    INSERT INTO @t (TEXTE, DESTINATAIRE) VALUES ('txt3', 'adr3@hotmail.com')
    En fait, j'aimerais inserer cette table dans mes 2 tables pour obtenir :
    TEXTE :
    11, 'txt1'
    12, 'txt2'
    13, 'txt3'
    MAIL :
    50, 'adr1@hotmail.com', 11
    51, 'adr2@hotmail.com', 12
    52, 'adr3@hotmail.com', 13
    Bien sur, les données que je veux inserer sont issues d'une requete (et pas d'une table remplie ligne par ligne)
    Je vois comment faire en passant par un curseur mais est ce qu'il y a un moyen en faisant une requete?

    Merci

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Bon, si personne n'a mieux, je poste quand meme ma solution pour le cas ou quelqu'un aurait le meme probleme :
    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
    DECLARE @TEXTE table (ID_TEXTE int identity, TEXTE varchar(50))
    DECLARE @MAIL table (ID_MAIL int identity, DESTINATAIRE varchar(50), ID_TEXTE int)
     
    INSERT INTO @TEXTE (TEXTE) VALUES ('Pour decaler')
     
    DECLARE @t TABLE (TEXTE varchar(50), DESTINATAIRE varchar(50));
    INSERT INTO @t (TEXTE, DESTINATAIRE) VALUES ('txt1', 'adr1@hotmail.com')
    INSERT INTO @t (TEXTE, DESTINATAIRE) VALUES ('txt2', 'adr2@hotmail.com')
    INSERT INTO @t (TEXTE, DESTINATAIRE) VALUES ('txt3', 'adr3@hotmail.com')
     
    DECLARE @txt varchar(50)
    DECLARE @dest varchar(50)
     
    DECLARE My_Cursor CURSOR FOR
    SELECT T.TEXTE
    , T.DESTINATAIRE
    FROM @t T;
    OPEN My_Cursor;
    FETCH NEXT FROM My_Cursor INTO @txt, @dest;
    WHILE @@FETCH_STATUS = 0
    BEGIN
     INSERT INTO @TEXTE (TEXTE) VALUES (@txt);
     INSERT INTO @MAIL (ID_TEXTE, DESTINATAIRE) (SELECT SCOPE_IDENTITY(), @dest)
     FETCH NEXT FROM My_Cursor INTO @txt, @dest;
    END;
    CLOSE My_Cursor;
    DEALLOCATE My_Cursor;
     
    SELECT * FROM @TEXTE
    SELECT * FROM @MAIL
    Mais si quelqu'un a mieux, je suis toujours preneur

  3. #3
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Bonjour,
    En fait, j'aimerais inserer cette table dans mes 2 tables pour obtenir :
    TEXTE :
    11, 'txt1'
    12, 'txt2'
    13, 'txt3'
    MAIL :
    50, 'adr1@hotmail.com', 11
    51, 'adr2@hotmail.com', 12
    52, 'adr3@hotmail.com', 13
    Bien sur, les données que je veux inserer sont issues d'une requete (et pas d'une table remplie ligne par ligne)
    Je vois comment faire en passant par un curseur mais est ce qu'il y a un moyen en faisant une requete?

    Merci
    Qu'est ce qui t'empêche dans un premier temps d'alimenter une table temporaire avec les données de la requête puis dans un second temps utiliser cette table temporaire pour mettre à jour tes tables TEXTE et MAIl ?
    Etienne ZINZINDOHOUE
    Billets-Articles

  4. #4
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Bah mon probleme, c'est les champs identity. Si j'alimente la table TEXTE, des ID seront créés et ce que je voudrais, c'est recuperer ceux-ci dans la table mail (sans utiliser le contenu du texte dans la requete car il peut ne pas etre unique). C'est pour ca que je vois bien comment faire avec un curseur mais pas avec une requete

  5. #5
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Bah mon probleme, c'est les champs identity. Si j'alimente la table TEXTE, des ID seront créés et ce que je voudrais, c'est recuperer ceux-ci dans la table mail (sans utiliser le contenu du texte dans la requete car il peut ne pas etre unique). C'est pour ca que je vois bien comment faire avec un curseur mais pas avec une requete
    SCOPE_IDENTITY() permet de récupérer la dernière valeur d'identité insérée dans une colonne identity dans la même étendue. Une étendue est un module : procédure stockée, déclencheur, fonction ou lot.
    Etienne ZINZINDOHOUE
    Billets-Articles

  6. #6
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Dans le code que j'ai posté, j'ai utilisé SCOPE_IDENTITY mais autant que je sache, il ne renvoie que le dernier id inséré. Ce que je voudrais, c'est inserer N enregistrements dans une table et recuperer leurs id dans une table. Dans l'exemple que j'ai donné dans le 1er post, insérer les 3 enregistrements dans les 2 tables en 1 requete...

  7. #7
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Deux requètes:

    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
     
    DECLARE @MAXID INTEGER
    SELECT @MAXID=MAX(ID)
    FROM TEXTE
    INSERT INTO TEXTE (TEXTE)
    SELECT DISTINCT TEXTE 
    FROM @t
     
    INSERT INTO MAIL (ID_TEXTE, DESTINATAIRE)
    SELECT TX.ID,@t.DESTINATAIRE
    , T.DESTINATAIRE
    FROM TEXTE TX
       INNER JOIN @t
        ON TX.texte=@t.texte
    WHERE TX.ID>@MAXID
    SELECT

Discussions similaires

  1. Insertion ds 1 table ayant un seul champ IDENTITY
    Par sahm84 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/12/2007, 09h14
  2. insertion multiples dans un meme champ
    Par fétémété dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 13/07/2006, 16h16
  3. Réponses: 9
    Dernier message: 07/09/2004, 11h12
  4. Insertion de champs dans un fichier
    Par flouflou dans le forum Linux
    Réponses: 3
    Dernier message: 16/08/2004, 14h48
  5. pb d'insertions multiples
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 14/07/2004, 14h49

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