Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/09/2011, 09h58   #1
Membre chevronné
 
Avatar de J0r_x
 
Homme
Analyste - Programmeur
Inscription : mai 2006
Messages : 712
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Analyste - Programmeur
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2006
Messages : 712
Points : 607
Points : 607
Par défaut Insert + Select MAX

Bonjour,

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

Code :
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 :
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 ?
__________________
Aucune aide par MP, utilisez le forum.
J0r_x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 14h42   #2
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 467
Points : 2 467
Envoyer un message via Yahoo à zinzineti
Essaye ceci :

Code :
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
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 08h33   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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 :
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'
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/09/2011, 14h24   #4
Membre chevronné
 
Avatar de J0r_x
 
Homme
Analyste - Programmeur
Inscription : mai 2006
Messages : 712
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Analyste - Programmeur
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2006
Messages : 712
Points : 607
Points : 607
Exactement ce que je cherchais, merci beaucoup.
__________________
Aucune aide par MP, utilisez le forum.
J0r_x est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h13.


 
 
 
 
Partenaires

Hébergement Web