Executer 5000 insertion en base de donnée SQL Server
4 réponses
BBComp
Bonjour à tous,
J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque
fois lance une insertion en base. (insert into...)
C'est très long ...
Avez-vous un moyen d'executer les 5000 insert d'un coup ?
Peux on "integrer" un datatable dans une table de la base si ces 2 ont la
même structure ?
Ou peux être une autre suggestion ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Laurent
Salut,
Je te conseille vivement d'exécuter une procédure stockée qui se chargera d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler laborieuse au début (ex:gestion des curseur...) mais les performances sont incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui passe de plusieurs minutes à moins d'une seconde.
D'une manière générale, je te conseille de toujours utiliser des procédures stockées, même pour les requêtes les plus simple...
Bon courage !
"BBComp" a écrit dans le message de news:
Bonjour à tous, J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque fois lance une insertion en base. (insert into...) C'est très long ... Avez-vous un moyen d'executer les 5000 insert d'un coup ? Peux on "integrer" un datatable dans une table de la base si ces 2 ont la même structure ? Ou peux être une autre suggestion ?
Merci d'avance. Benji
Salut,
Je te conseille vivement d'exécuter une procédure stockée qui se chargera
d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler
laborieuse au début (ex:gestion des curseur...) mais les performances sont
incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui
passe de plusieurs minutes à moins d'une seconde.
D'une manière générale, je te conseille de toujours utiliser des procédures
stockées, même pour les requêtes les plus simple...
Bon courage !
"BBComp" <BBComp@discussions.microsoft.com> a écrit dans le message de news:
41F1CA29-BF49-40D7-97EA-7C8C51125689@microsoft.com...
Bonjour à tous,
J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque
fois lance une insertion en base. (insert into...)
C'est très long ...
Avez-vous un moyen d'executer les 5000 insert d'un coup ?
Peux on "integrer" un datatable dans une table de la base si ces 2 ont la
même structure ?
Ou peux être une autre suggestion ?
Je te conseille vivement d'exécuter une procédure stockée qui se chargera d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler laborieuse au début (ex:gestion des curseur...) mais les performances sont incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui passe de plusieurs minutes à moins d'une seconde.
D'une manière générale, je te conseille de toujours utiliser des procédures stockées, même pour les requêtes les plus simple...
Bon courage !
"BBComp" a écrit dans le message de news:
Bonjour à tous, J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque fois lance une insertion en base. (insert into...) C'est très long ... Avez-vous un moyen d'executer les 5000 insert d'un coup ? Peux on "integrer" un datatable dans une table de la base si ces 2 ont la même structure ? Ou peux être une autre suggestion ?
Merci d'avance. Benji
TOny
En aspx avec le pilote client sql server, j'effectue de très nombreux insert (environ 6000) et cela va assez vite (quelques secondes). Seulement j'ai dû optimiser mon code car j'avais trop de traitement dans ma boucle.
AVANT : select table1 while not table1.eof
if then end if
select table3 if table3.... then else end if
../..
insert table2
table1.next end while
APRES : select table1 while not table1.eof insert table2 table1.next end while
if then else end if update table2 update table2
Tout ça pour dire que pour ma part l'insert d'un select (assez complexe) vers une table s'effectue rapidement (environ 20 fois plus vite qu'en asp classique sous ADOBD)
Tony
"Laurent" a écrit dans le message de news:
Salut,
Je te conseille vivement d'exécuter une procédure stockée qui se chargera d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler laborieuse au début (ex:gestion des curseur...) mais les performances sont incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui passe de plusieurs minutes à moins d'une seconde.
D'une manière générale, je te conseille de toujours utiliser des procédures stockées, même pour les requêtes les plus simple...
Bon courage !
"BBComp" a écrit dans le message de news:
Bonjour à tous, J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque fois lance une insertion en base. (insert into...) C'est très long ... Avez-vous un moyen d'executer les 5000 insert d'un coup ? Peux on "integrer" un datatable dans une table de la base si ces 2 ont la même structure ? Ou peux être une autre suggestion ?
Merci d'avance. Benji
En aspx avec le pilote client sql server, j'effectue de très nombreux insert
(environ 6000) et cela va assez vite (quelques secondes).
Seulement j'ai dû optimiser mon code car j'avais trop de traitement dans ma
boucle.
AVANT :
select table1
while not table1.eof
if then
end if
select table3
if table3.... then
else
end if
../..
insert table2
table1.next
end while
APRES :
select table1
while not table1.eof
insert table2
table1.next
end while
if then
else
end if
update table2
update table2
Tout ça pour dire que pour ma part l'insert d'un select (assez complexe)
vers une table s'effectue rapidement (environ 20 fois plus vite qu'en asp
classique sous ADOBD)
Tony
"Laurent" <laurent@laurent.la> a écrit dans le message de news:
OiJraznOFHA.1176@TK2MSFTNGP12.phx.gbl...
Salut,
Je te conseille vivement d'exécuter une procédure stockée qui se chargera
d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler
laborieuse au début (ex:gestion des curseur...) mais les performances sont
incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui
passe de plusieurs minutes à moins d'une seconde.
D'une manière générale, je te conseille de toujours utiliser des
procédures
stockées, même pour les requêtes les plus simple...
Bon courage !
"BBComp" <BBComp@discussions.microsoft.com> a écrit dans le message de
news:
41F1CA29-BF49-40D7-97EA-7C8C51125689@microsoft.com...
Bonjour à tous,
J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a
chaque
fois lance une insertion en base. (insert into...)
C'est très long ...
Avez-vous un moyen d'executer les 5000 insert d'un coup ?
Peux on "integrer" un datatable dans une table de la base si ces 2 ont la
même structure ?
Ou peux être une autre suggestion ?
En aspx avec le pilote client sql server, j'effectue de très nombreux insert (environ 6000) et cela va assez vite (quelques secondes). Seulement j'ai dû optimiser mon code car j'avais trop de traitement dans ma boucle.
AVANT : select table1 while not table1.eof
if then end if
select table3 if table3.... then else end if
../..
insert table2
table1.next end while
APRES : select table1 while not table1.eof insert table2 table1.next end while
if then else end if update table2 update table2
Tout ça pour dire que pour ma part l'insert d'un select (assez complexe) vers une table s'effectue rapidement (environ 20 fois plus vite qu'en asp classique sous ADOBD)
Tony
"Laurent" a écrit dans le message de news:
Salut,
Je te conseille vivement d'exécuter une procédure stockée qui se chargera d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler laborieuse au début (ex:gestion des curseur...) mais les performances sont incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui passe de plusieurs minutes à moins d'une seconde.
D'une manière générale, je te conseille de toujours utiliser des procédures stockées, même pour les requêtes les plus simple...
Bon courage !
"BBComp" a écrit dans le message de news:
Bonjour à tous, J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque fois lance une insertion en base. (insert into...) C'est très long ... Avez-vous un moyen d'executer les 5000 insert d'un coup ? Peux on "integrer" un datatable dans une table de la base si ces 2 ont la même structure ? Ou peux être une autre suggestion ?
Merci d'avance. Benji
BBComp
Bonjour, J'ai quand même un soucis avec les proc stockées. Mes insert ne sont pas tous dans la même table. Je passe donc en parametre @nomTable Et je fait mon insert : insert into @nomTable Je declare donc un varchar qui contient ma requete et j'execute à l'aide de : Exec @str
La procedure stockée ne me fait donc pas gagner de temps ...
Ai-je mal construit ma procedure ? Y-a-t-il un autre moyen d'aller plus vite ?
Merci d'avance. BBComp
"Laurent" a écrit :
Salut,
Je te conseille vivement d'exécuter une procédure stockée qui se chargera d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler laborieuse au début (ex:gestion des curseur...) mais les performances sont incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui passe de plusieurs minutes à moins d'une seconde.
D'une manière générale, je te conseille de toujours utiliser des procédures stockées, même pour les requêtes les plus simple...
Bon courage !
"BBComp" a écrit dans le message de news:
> Bonjour à tous, > J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque > fois lance une insertion en base. (insert into...) > C'est très long ... > Avez-vous un moyen d'executer les 5000 insert d'un coup ? > Peux on "integrer" un datatable dans une table de la base si ces 2 ont la > même structure ? > Ou peux être une autre suggestion ? > > Merci d'avance. > Benji
Bonjour,
J'ai quand même un soucis avec les proc stockées.
Mes insert ne sont pas tous dans la même table.
Je passe donc en parametre @nomTable
Et je fait mon insert : insert into @nomTable
Je declare donc un varchar qui contient ma requete et j'execute à l'aide de :
Exec @str
La procedure stockée ne me fait donc pas gagner de temps ...
Ai-je mal construit ma procedure ?
Y-a-t-il un autre moyen d'aller plus vite ?
Merci d'avance.
BBComp
"Laurent" a écrit :
Salut,
Je te conseille vivement d'exécuter une procédure stockée qui se chargera
d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler
laborieuse au début (ex:gestion des curseur...) mais les performances sont
incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui
passe de plusieurs minutes à moins d'une seconde.
D'une manière générale, je te conseille de toujours utiliser des procédures
stockées, même pour les requêtes les plus simple...
Bon courage !
"BBComp" <BBComp@discussions.microsoft.com> a écrit dans le message de news:
41F1CA29-BF49-40D7-97EA-7C8C51125689@microsoft.com...
> Bonjour à tous,
> J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque
> fois lance une insertion en base. (insert into...)
> C'est très long ...
> Avez-vous un moyen d'executer les 5000 insert d'un coup ?
> Peux on "integrer" un datatable dans une table de la base si ces 2 ont la
> même structure ?
> Ou peux être une autre suggestion ?
>
> Merci d'avance.
> Benji
Bonjour, J'ai quand même un soucis avec les proc stockées. Mes insert ne sont pas tous dans la même table. Je passe donc en parametre @nomTable Et je fait mon insert : insert into @nomTable Je declare donc un varchar qui contient ma requete et j'execute à l'aide de : Exec @str
La procedure stockée ne me fait donc pas gagner de temps ...
Ai-je mal construit ma procedure ? Y-a-t-il un autre moyen d'aller plus vite ?
Merci d'avance. BBComp
"Laurent" a écrit :
Salut,
Je te conseille vivement d'exécuter une procédure stockée qui se chargera d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler laborieuse au début (ex:gestion des curseur...) mais les performances sont incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui passe de plusieurs minutes à moins d'une seconde.
D'une manière générale, je te conseille de toujours utiliser des procédures stockées, même pour les requêtes les plus simple...
Bon courage !
"BBComp" a écrit dans le message de news:
> Bonjour à tous, > J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a chaque > fois lance une insertion en base. (insert into...) > C'est très long ... > Avez-vous un moyen d'executer les 5000 insert d'un coup ? > Peux on "integrer" un datatable dans une table de la base si ces 2 ont la > même structure ? > Ou peux être une autre suggestion ? > > Merci d'avance. > Benji
Paul Bacelar
Les procédures stockée sont là pour faire gagner du temps d'exécutions mais aussi pour permettre une abstraction de la base, c'est à dire de pouvoir changer le schéma de la base sans impacter le code de la couche business.
En ayant comme paramètre de votre procédure stockée le nom d'une table, vous contrevenez à tous les fondements de l'utilisation de celles-ci.
Si vous avez un nombre conséquents de procédures stockées avec un code très proche, je vous conseil de développer un petit logiciel qui générera les scripts SQL de créations de ses procédures stockées et que vous appliquerez sur votre base lors de son installation pour avoir un ensemble de procédures stockées exhaustif et performant. -- Paul Bacelar
"BBComp" wrote in message news:
Bonjour, J'ai quand même un soucis avec les proc stockées. Mes insert ne sont pas tous dans la même table. Je passe donc en parametre @nomTable Et je fait mon insert : insert into @nomTable Je declare donc un varchar qui contient ma requete et j'execute à l'aide
de :
Exec @str
La procedure stockée ne me fait donc pas gagner de temps ...
Ai-je mal construit ma procedure ? Y-a-t-il un autre moyen d'aller plus vite ?
Merci d'avance. BBComp
"Laurent" a écrit :
> Salut, > > Je te conseille vivement d'exécuter une procédure stockée qui se
chargera
> d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler > laborieuse au début (ex:gestion des curseur...) mais les performances
sont
> incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui > passe de plusieurs minutes à moins d'une seconde. > > D'une manière générale, je te conseille de toujours utiliser des
procédures
> stockées, même pour les requêtes les plus simple... > > Bon courage ! > > > > > "BBComp" a écrit dans le message de
news:
> > > Bonjour à tous, > > J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a
chaque
> > fois lance une insertion en base. (insert into...) > > C'est très long ... > > Avez-vous un moyen d'executer les 5000 insert d'un coup ? > > Peux on "integrer" un datatable dans une table de la base si ces 2 ont
la
> > même structure ? > > Ou peux être une autre suggestion ? > > > > Merci d'avance. > > Benji > > >
Les procédures stockée sont là pour faire gagner du temps d'exécutions mais
aussi pour permettre une abstraction de la base, c'est à dire de pouvoir
changer le schéma de la base sans impacter le code de la couche business.
En ayant comme paramètre de votre procédure stockée le nom d'une table, vous
contrevenez à tous les fondements de l'utilisation de celles-ci.
Si vous avez un nombre conséquents de procédures stockées avec un code très
proche, je vous conseil de développer un petit logiciel qui générera les
scripts SQL de créations de ses procédures stockées et que vous appliquerez
sur votre base lors de son installation pour avoir un ensemble de procédures
stockées exhaustif et performant.
--
Paul Bacelar
"BBComp" <BBComp@discussions.microsoft.com> wrote in message
news:8D5B93CB-E553-4EF9-9DFF-DF2491EF05C2@microsoft.com...
Bonjour,
J'ai quand même un soucis avec les proc stockées.
Mes insert ne sont pas tous dans la même table.
Je passe donc en parametre @nomTable
Et je fait mon insert : insert into @nomTable
Je declare donc un varchar qui contient ma requete et j'execute à l'aide
de :
Exec @str
La procedure stockée ne me fait donc pas gagner de temps ...
Ai-je mal construit ma procedure ?
Y-a-t-il un autre moyen d'aller plus vite ?
Merci d'avance.
BBComp
"Laurent" a écrit :
> Salut,
>
> Je te conseille vivement d'exécuter une procédure stockée qui se
chargera
> d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler
> laborieuse au début (ex:gestion des curseur...) mais les performances
sont
> incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui
> passe de plusieurs minutes à moins d'une seconde.
>
> D'une manière générale, je te conseille de toujours utiliser des
procédures
> stockées, même pour les requêtes les plus simple...
>
> Bon courage !
>
>
>
>
> "BBComp" <BBComp@discussions.microsoft.com> a écrit dans le message de
news:
> 41F1CA29-BF49-40D7-97EA-7C8C51125689@microsoft.com...
> > Bonjour à tous,
> > J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a
chaque
> > fois lance une insertion en base. (insert into...)
> > C'est très long ...
> > Avez-vous un moyen d'executer les 5000 insert d'un coup ?
> > Peux on "integrer" un datatable dans une table de la base si ces 2 ont
la
> > même structure ?
> > Ou peux être une autre suggestion ?
> >
> > Merci d'avance.
> > Benji
>
>
>
Les procédures stockée sont là pour faire gagner du temps d'exécutions mais aussi pour permettre une abstraction de la base, c'est à dire de pouvoir changer le schéma de la base sans impacter le code de la couche business.
En ayant comme paramètre de votre procédure stockée le nom d'une table, vous contrevenez à tous les fondements de l'utilisation de celles-ci.
Si vous avez un nombre conséquents de procédures stockées avec un code très proche, je vous conseil de développer un petit logiciel qui générera les scripts SQL de créations de ses procédures stockées et que vous appliquerez sur votre base lors de son installation pour avoir un ensemble de procédures stockées exhaustif et performant. -- Paul Bacelar
"BBComp" wrote in message news:
Bonjour, J'ai quand même un soucis avec les proc stockées. Mes insert ne sont pas tous dans la même table. Je passe donc en parametre @nomTable Et je fait mon insert : insert into @nomTable Je declare donc un varchar qui contient ma requete et j'execute à l'aide
de :
Exec @str
La procedure stockée ne me fait donc pas gagner de temps ...
Ai-je mal construit ma procedure ? Y-a-t-il un autre moyen d'aller plus vite ?
Merci d'avance. BBComp
"Laurent" a écrit :
> Salut, > > Je te conseille vivement d'exécuter une procédure stockée qui se
chargera
> d'effectuer les cinq mille INSERT INTO. La syntaxe de T-SQL peut sembler > laborieuse au début (ex:gestion des curseur...) mais les performances
sont
> incomparables. Tu peux passer, sans exagérer, à des temps de réponse qui > passe de plusieurs minutes à moins d'une seconde. > > D'une manière générale, je te conseille de toujours utiliser des
procédures
> stockées, même pour les requêtes les plus simple... > > Bon courage ! > > > > > "BBComp" a écrit dans le message de
news:
> > > Bonjour à tous, > > J'essai d'optimiser un programme qui boucle 5 à 6 milles fois et, a
chaque
> > fois lance une insertion en base. (insert into...) > > C'est très long ... > > Avez-vous un moyen d'executer les 5000 insert d'un coup ? > > Peux on "integrer" un datatable dans une table de la base si ces 2 ont
la
> > même structure ? > > Ou peux être une autre suggestion ? > > > > Merci d'avance. > > Benji > > >