Insertion de nombre de 1 à N

ftug Messages postés 5 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 6 mars 2006 - 27 févr. 2006 à 12:07
kadideveloppement Messages postés 2 Date d'inscription lundi 27 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008 - 28 oct. 2008 à 10:21
Bonjour,

j'aimerai inserer dans une table des nombre de 1 à N avec le moins de requetes possible ( le serveur SQL est déjà bien chargé )

pour l'instant j'ai la methode de boucle WHILE avec une insertion a chaque passage et un compteur pour savoir la valeur a ajouter.
SET @cpt=1
WHILE @cpt<@N
begin
INSERT INTO table_enumeration ('champ_1') VALUES (@cpt)
SET @cpt = @cpt + 1
end

une autre solution serait de droper la table et faire des inserts en utilisant un id avec compteur auto-incrémentable.

je cherche a faire 1 seule requete d'insert du format:
INSERT INTO table_enumeration VALUES (SELECT ... )

pour ca, je cherche une requete SELECT qui me renvois des chiffres de 1 à N et qui ne requete sur aucune table.
je ne sais pas si c'est possible mais comme je seche un peu, je me suis dit que l'appelle de la communauté m'aiderai surement.

merci d'avance!

6 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
1 mars 2006 à 15:16
salut

quel est ton SGBDR ?

a ma connaissance, tu ne pourra faire cela que sous ORACLE uniquement

c'est le seul SGBDR qui permette d'utiliser les "lignes valuées", c'est a dire inserer plusieurs lignes dans une table sans faire plusieurs requete INSERT (et sans utiliser de sous requete SELECT)

par exmple sous oracle tu dois pouvoir faire

INSERT INTO matable (monchamps) VALUES (1,2,3,4)
et ca va inserer 4 lignes

mais sinon je ne vois pas d'autre solution a ton probleme
0
ftug Messages postés 5 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 6 mars 2006
1 mars 2006 à 15:30
je suis malheureusement en SQL server 2000

merci quand même
0
mictif Messages postés 105 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 14 février 2013 2
4 mars 2006 à 10:23
quelle est le but ? pour avoir un id auto incremente ?
0
ftug Messages postés 5 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 6 mars 2006
6 mars 2006 à 11:10
le but est de faire un tirage au sort.
je veux N ticket sur les M en BdD sans doublon sachant que le N et M peuvent etre proche.

je ne peut donc pas tirer un chiffre et vérifier qu'il n'a pas déjà été tiré. si N est proche de M on obtiens un tps trop grand!

malheureusement je n'ai pas les tickets en BdD seulement le nombre acheté par les utilisateurs.
la méthode de tirage est déjà faite mais j'essaye d'optimisé un peut l'insertion des tickets.

l'allgo est comme ceci:

- on récupère le nombre total de tickets vendu
- on insert chaque ticket en BdD avec son numéro <-- c'est la que j'aurais besion d'une optimisation
- je fait un select TOP M tickets ORDER BY newid() pour avoir les tickets gagnants rangé aléatoirement
- je fait une recherche pour chaque ticket sur les utilisateurs afin de trouvé a qui il apartient
- je donne son cadeau a l'utilisateur
- je passe au ticket suivant

le reste de l'algo est suffisament optimisé a mon gout mais l'insert de 5000 ou 20000 enrengistrement dans une boucle WHILE me dérange bcp!

merci de l'interet que vous portez a mon problème.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
6 mars 2006 à 15:34
tout depend du programme qui va inserer ces lignes.

mais je pense que tu pourra gagner du temps en utilisant le bulk insert :

tu genere un fichier avec le contenu de ta table, puis tu l'injecte dans la table cible, d'un seul coup. c'est tres rapide, et 20000 lignes, ca ne prendra que quelques secondes.
0
kadideveloppement Messages postés 2 Date d'inscription lundi 27 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008
28 oct. 2008 à 10:21
Salut;
je croix on utilise incrementation pour eviter les doublons
cordialement.
0
Rejoignez-nous