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 trop longue


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de annalady
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 169
    Par défaut Insertion trop longue
    Bonjour,

    Je voudrais insérer, dans une table, la combinaison des toutes les valeurs possibles pour trois indicateurs.

    Les trois indicateurs ont un intervalle de valeurs propre.

    L’échelle des valeurs est de 0.25.

    Pour l’instant je fais comme ceci :

    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
     
     
    Set @currentsphere = @spheremin
     
    set @currentcylinder = @cylindermin
     
    set @currentaddition = @additionmin
     
    set @scale = 0.25 
     
    BEGIN
     
                            while(@currentsphere <= @spheremax)
     
                            BEGIN
     
                                        SET @currentcylinder = @cylindermin
     
                                        while(@currentcylinder <= @cylindermax)
     
                                                    BEGIN
     
                                                    SET @currentaddition = @additionmin
     
                                                    while(@currentaddition <= @additionmax)
     
                                                                BEGIN
     
                                                                insert into #TableUWS (sphere,cylinder,addition,weighted_sales,weight_per_sphere,user_weight_per_sphere,weight_per_cylinder,weight_per_addition,user_weighted_sales)
     
                                                                values(@currentsphere,@currentcylinder,@currentaddition,0,0,0,0,0,0)
     
                                                                Set @currentaddition = @currentaddition + @scale
     
                                                                END
     
                                                    Set @currentcylinder = @currentcylinder + @scale
     
                                                    END
     
                                        Set @currentsphere = @currentsphere + @scale
     
                            END
     
                END

    Pour un exemple simple :

    0 <= sphere <= 0.5

    0.25 <= cylindre <= 0.5

    0 <= addition <= 0.25

    J’aurai comme résultat :



    S C A

    0 0.25 0

    0 0.25 0.25

    0 0.5 0

    0 0.5 0.25

    0.25 0.25 0

    0.25 0.25 0.25

    0.25 0.5 0

    ..... Et ainsi de suite



    Sauf qu’en pratique les intervalles sont plus grand genre 0 à 10 et qu’avec ma méthode cela prend plus de 2minutes.

    Pensez-vous qu'il existe une méthode plus efficace pour remplir ma table ?

    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Par défaut
    Bonsoir,

    si ne ne m'abuse c'est un produit cartésien. Donc a priori :

    Jeu de test
    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
     
    create table cylindre (cylVal decimal(5,2) null)
    create table sphere (sphVal decimal(5,2) null)
    create table addition (addlVal decimal(5,2) null)
     
    truncate table cylindre 
    truncate table sphere
    truncate table addition
     
     
    declare @cylMin decimal(5,2)
    declare @cylMax decimal(5,2)
    declare @sphMin decimal(5,2) 
    declare @sphMax decimal(5,2)
    declare @addMin decimal(5,2)
    declare @addMax decimal(5,2)
    declare @pas decimal(5,2)
     
    set @pas =0.25
     
    set @cylmin = 0.25
    set @cylMax = 0.5
     
    set @sphmin = 0.0
    set @sphMax = 0.5
     
    set @addmin = 0.0
    set @addMax = 0.25
     
     
    while (@sphMin <=@sphMax)
    begin
    	insert into sphere
    	select @sphMin
     
    	set @sphMin = @sphMin + @pas
    END
     
    while (@cylMin <=@cylMax)
    begin
    	insert into cylindre
    	select @cylMin
     
    	set @cylMin = @cylMin + @pas
    END
     
    while (@addMin <=@addMax)
    begin
    	insert into addition
    	select @addMin
     
    	set @addMin = @addMin + @pas
    END
    Le produit cartésien pour avoir le résultat (la requete à lancer hyper rapide )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select sphVal, cylVal, addlVal
    From sphere, cylindre, addition
    Resulat (est-ce ce que tu attends ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sphere    cylindre    addition
    .00	.50	.25
    .25	.50	.25
    .50	.50	.25
    .00	.25	.25
    .25	.25	.25
    .50	.25	.25
    .00	.50	.00
    .25	.50	.00
    .50	.50	.00
    .00	.25	.00
    .25	.25	.00
    .50	.25	.00
    PS : pour info, je viens de faire le test en mettant de 0 à 100 par pas de 0.25 dans les 3 tables, sur mon pauvre portable avec rien de mémoire et P4, il a affiché le resultat au bout de... rien car j'ai arrêté ca chauffait !
    Faut dire que ca fait 400*400*400 combinaisons soit 64 Millions de lignes. C'est sur qu'il valait mieux avoir un serveur

    Par contre je te rassure cela fait moins d'1s sur ma bécane pour une fourchette de 1 à 10 par pas de 0.25

  3. #3
    Membre confirmé Avatar de annalady
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 169
    Par défaut
    En effet ça va beaucoup plus vite maintenant

    Merci beaucoup !

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

Discussions similaires

  1. insertion trop longues => transaction rollback !
    Par RealDarren dans le forum Accès aux données
    Réponses: 5
    Dernier message: 04/02/2009, 10h37
  2. [VB.net]Requete Insert trop longue?
    Par Hakki dans le forum Accès aux données
    Réponses: 7
    Dernier message: 24/10/2006, 10h06
  3. Erreur ORA-01704 : constante de chaine trop longue
    Par verrec_s dans le forum Oracle
    Réponses: 22
    Dernier message: 13/12/2004, 15h30
  4. [TP]Probleme de ligne trop longue
    Par poppels dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 24/09/2004, 06h36
  5. chaine trop longue pour envoyer en socket?
    Par jeje.r dans le forum C++Builder
    Réponses: 10
    Dernier message: 27/06/2003, 16h36

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