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 :

Insert + Select MAX


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Par défaut Insert + Select MAX
    Bonjour,

    j'aimerais faire un insert de plusieurs centaines de lignes, pour cela je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO MATABLE SELECT COL1,COL2,... FROM MATABLE2 WHERE COL2 = 'XXX'
    Le problème c'est que COL1 est un numéro, clé unique mais pas auto incrémenté.
    Je pensais donc faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO MATABLE 
        SELECT (SELECT ISNULL(MAX(COL1),0) + 1 FROM MATABLE),
                 COL2,... FROM MATABLE2 WHERE COL2 = 'XXX'
    Mais ça ne fonctionne pas, ça me renvoi, que la clé existe déjà.
    Comment faire pour le SELECT MAX prenne en compte les lignes en cour de création par l'INSERT ?

  2. #2
    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
    Essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO MATABLE (COL1,COL2) SELECT ISNULL(MAX(MATABLE.COL1),0) + 1, MATABLE2.COL2 FROM MATABLE, MATABLE2 WHERE MATABLE2.COL2 = 'XXX'
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    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
    INSERT INTO MATABLE (COL1,COL2) SELECT ISNULL(MAX(MATABLE.COL1),0) + 1, MATABLE2.COL2 FROM MATABLE, MATABLE2 WHERE MATABLE2.COL2 = 'XXX'
    Je pense que ce ne marchera pas s'il a plusieurs lignes?
    Je passerais simplement par un ROW_NUMBER():




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DECLARE @MAXID INTEGER
    SELECT MAXID =MAX(COL1)
    FROM MATABLE
     
     
    INSERT INTO MATABLE (COL1,COL2...)
    SELECT ROW_NUMBER()OVER(ORDER BY COL2)+@MAXID ,COL2,... 
    FROM MATABLE2 
    WHERE COL2 = 'XXX'

  4. #4
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Par défaut
    Exactement ce que je cherchais, merci beaucoup.

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

Discussions similaires

  1. [INSERT][SELECT] insert avec un select imbriqué
    Par narmataru dans le forum SQL
    Réponses: 11
    Dernier message: 06/03/2013, 03h04
  2. select max dans un insert
    Par *alexandre* dans le forum Requêtes
    Réponses: 5
    Dernier message: 14/04/2012, 18h20
  3. Select max id avant insertion (pb insertion parallèles)
    Par antoine.ginsburg dans le forum Persistance des données
    Réponses: 2
    Dernier message: 02/08/2011, 10h08
  4. Incrémenter champ : insert into . select max(.) + 1 from .
    Par ludo.guy dans le forum Langage SQL
    Réponses: 10
    Dernier message: 25/11/2004, 14h39
  5. Problème select MAX(annee) dans une requête
    Par grisounette dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/10/2004, 17h36

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