Bonjour,
voici le traitement que je souhaite mettre dans ma procédure stockée: Je
veux alimenter ma table destination à partir de ma table source. Dans ma
table source, il y a un enregistrement par article et les qtés sont
ventilées pour chaque semaine. Dans ma table destination, il y a un
enregistrement par article et par semaine
table source : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
table destination : article sem qte
(table1) A 0 50
A 1 30
A 2 65
code que j'ai essayé dans ma procédure stockée:
SET @cpt = 0
WHILE @cpt < 53
BEGIN
SET @cptstrÊst(@cpt as varchar(3))
SET @sql = 'INSERT INTO table1 (article, sem, qte)
SELECT article,' +@cptstr+ ', MS'+@cptstr+
' FROM Table2
WHERE typeLigne = ''5PREV'' and
prevision = 1'
EXEC (@sql)
SET @cpt = @cpt+1
END
Ce code fonctionne. En revanche, au niveau des performances c'est pas
génial. Je pense que cela vient du fait que la procédure n'est pas compilée
(sql dynamique)
Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
dynamique? et donc améliorer les performances
merci pour votre analyse
Bonjour,
voici le traitement que je souhaite mettre dans ma procédure stockée: Je
veux alimenter ma table destination à partir de ma table source. Dans ma
table source, il y a un enregistrement par article et les qtés sont
ventilées pour chaque semaine. Dans ma table destination, il y a un
enregistrement par article et par semaine
table source : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
table destination : article sem qte
(table1) A 0 50
A 1 30
A 2 65
code que j'ai essayé dans ma procédure stockée:
SET @cpt = 0
WHILE @cpt < 53
BEGIN
SET @cptstrÊst(@cpt as varchar(3))
SET @sql = 'INSERT INTO table1 (article, sem, qte)
SELECT article,' +@cptstr+ ', MS'+@cptstr+
' FROM Table2
WHERE typeLigne = ''5PREV'' and
prevision = 1'
EXEC (@sql)
SET @cpt = @cpt+1
END
Ce code fonctionne. En revanche, au niveau des performances c'est pas
génial. Je pense que cela vient du fait que la procédure n'est pas compilée
(sql dynamique)
Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
dynamique? et donc améliorer les performances
merci pour votre analyse
Bonjour,
voici le traitement que je souhaite mettre dans ma procédure stockée: Je
veux alimenter ma table destination à partir de ma table source. Dans ma
table source, il y a un enregistrement par article et les qtés sont
ventilées pour chaque semaine. Dans ma table destination, il y a un
enregistrement par article et par semaine
table source : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
table destination : article sem qte
(table1) A 0 50
A 1 30
A 2 65
code que j'ai essayé dans ma procédure stockée:
SET @cpt = 0
WHILE @cpt < 53
BEGIN
SET @cptstrÊst(@cpt as varchar(3))
SET @sql = 'INSERT INTO table1 (article, sem, qte)
SELECT article,' +@cptstr+ ', MS'+@cptstr+
' FROM Table2
WHERE typeLigne = ''5PREV'' and
prevision = 1'
EXEC (@sql)
SET @cpt = @cpt+1
END
Ce code fonctionne. En revanche, au niveau des performances c'est pas
génial. Je pense que cela vient du fait que la procédure n'est pas compilée
(sql dynamique)
Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
dynamique? et donc améliorer les performances
merci pour votre analyse
Pierre-Yves,
N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
select
article,
i,
case
when i = 0 then MS0
when i = 1 then MS1
when i = 2 then MS2
...
when i = 52 then MS52 end
into destination
from source, (
select ProductID-1 from Northwind..Products
where ProductID between 1 and 53
) N53
-- puis créer les indexes, etc.
[pas testée]
Steve Kass
Drew University
Pierre-Yves wrote:
>Bonjour,
>voici le traitement que je souhaite mettre dans ma procédure stockée: Je
>veux alimenter ma table destination à partir de ma table source. Dans ma
>table source, il y a un enregistrement par article et les qtés sont
>ventilées pour chaque semaine. Dans ma table destination, il y a un
>enregistrement par article et par semaine
>
>table source : article MS0 MS1 MS2 .... MS52
>(table2) A 50 30 65
>
>table destination : article sem qte
>(table1) A 0 50
> A 1 30
> A 2 65
>
>code que j'ai essayé dans ma procédure stockée:
>SET @cpt = 0
>
>WHILE @cpt < 53
>
>BEGIN
>
> SET @cptstrÊst(@cpt as varchar(3))
>
> SET @sql = 'INSERT INTO table1 (article, sem, qte)
> SELECT article,' +@cptstr+ ', MS'+@cptstr+
> ' FROM Table2
> WHERE typeLigne = ''5PREV'' and
> prevision = 1'
>
> EXEC (@sql)
>
> SET @cpt = @cpt+1
>
>END
>
>Ce code fonctionne. En revanche, au niveau des performances c'est pas
>génial. Je pense que cela vient du fait que la procédure n'est pas
>(sql dynamique)
>Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
>dynamique? et donc améliorer les performances
>
>merci pour votre analyse
>
>
>
>
>
Pierre-Yves,
N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
select
article,
i,
case
when i = 0 then MS0
when i = 1 then MS1
when i = 2 then MS2
...
when i = 52 then MS52 end
into destination
from source, (
select ProductID-1 from Northwind..Products
where ProductID between 1 and 53
) N53
-- puis créer les indexes, etc.
[pas testée]
Steve Kass
Drew University
Pierre-Yves wrote:
>Bonjour,
>voici le traitement que je souhaite mettre dans ma procédure stockée: Je
>veux alimenter ma table destination à partir de ma table source. Dans ma
>table source, il y a un enregistrement par article et les qtés sont
>ventilées pour chaque semaine. Dans ma table destination, il y a un
>enregistrement par article et par semaine
>
>table source : article MS0 MS1 MS2 .... MS52
>(table2) A 50 30 65
>
>table destination : article sem qte
>(table1) A 0 50
> A 1 30
> A 2 65
>
>code que j'ai essayé dans ma procédure stockée:
>SET @cpt = 0
>
>WHILE @cpt < 53
>
>BEGIN
>
> SET @cptstrÊst(@cpt as varchar(3))
>
> SET @sql = 'INSERT INTO table1 (article, sem, qte)
> SELECT article,' +@cptstr+ ', MS'+@cptstr+
> ' FROM Table2
> WHERE typeLigne = ''5PREV'' and
> prevision = 1'
>
> EXEC (@sql)
>
> SET @cpt = @cpt+1
>
>END
>
>Ce code fonctionne. En revanche, au niveau des performances c'est pas
>génial. Je pense que cela vient du fait que la procédure n'est pas
>(sql dynamique)
>Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
>dynamique? et donc améliorer les performances
>
>merci pour votre analyse
>
>
>
>
>
Pierre-Yves,
N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
select
article,
i,
case
when i = 0 then MS0
when i = 1 then MS1
when i = 2 then MS2
...
when i = 52 then MS52 end
into destination
from source, (
select ProductID-1 from Northwind..Products
where ProductID between 1 and 53
) N53
-- puis créer les indexes, etc.
[pas testée]
Steve Kass
Drew University
Pierre-Yves wrote:
>Bonjour,
>voici le traitement que je souhaite mettre dans ma procédure stockée: Je
>veux alimenter ma table destination à partir de ma table source. Dans ma
>table source, il y a un enregistrement par article et les qtés sont
>ventilées pour chaque semaine. Dans ma table destination, il y a un
>enregistrement par article et par semaine
>
>table source : article MS0 MS1 MS2 .... MS52
>(table2) A 50 30 65
>
>table destination : article sem qte
>(table1) A 0 50
> A 1 30
> A 2 65
>
>code que j'ai essayé dans ma procédure stockée:
>SET @cpt = 0
>
>WHILE @cpt < 53
>
>BEGIN
>
> SET @cptstrÊst(@cpt as varchar(3))
>
> SET @sql = 'INSERT INTO table1 (article, sem, qte)
> SELECT article,' +@cptstr+ ', MS'+@cptstr+
> ' FROM Table2
> WHERE typeLigne = ''5PREV'' and
> prevision = 1'
>
> EXEC (@sql)
>
> SET @cpt = @cpt+1
>
>END
>
>Ce code fonctionne. En revanche, au niveau des performances c'est pas
>génial. Je pense que cela vient du fait que la procédure n'est pas
>(sql dynamique)
>Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
>dynamique? et donc améliorer les performances
>
>merci pour votre analyse
>
>
>
>
>
Il faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" a écrit dans le message de
news:
> Pierre-Yves,
>
> N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
> nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
>
> select
> article,
> i,
> case
> when i = 0 then MS0
> when i = 1 then MS1
> when i = 2 then MS2
> ...
> when i = 52 then MS52 end
> into destination
> from source, (
> select ProductID-1 from Northwind..Products
> where ProductID between 1 and 53
> ) N53
>
> -- puis créer les indexes, etc.
>
> [pas testée]
>
> Steve Kass
> Drew University
>
> Pierre-Yves wrote:
>
> >Bonjour,
> >voici le traitement que je souhaite mettre dans ma procédure stockée:
> >veux alimenter ma table destination à partir de ma table source. Dans
> >table source, il y a un enregistrement par article et les qtés sont
> >ventilées pour chaque semaine. Dans ma table destination, il y a un
> >enregistrement par article et par semaine
> >
> >table source : article MS0 MS1 MS2 .... MS52
> >(table2) A 50 30 65
> >
> >table destination : article sem qte
> >(table1) A 0 50
> > A 1 30
> > A 2 65
> >
> >code que j'ai essayé dans ma procédure stockée:
> >SET @cpt = 0
> >
> >WHILE @cpt < 53
> >
> >BEGIN
> >
> > SET @cptstrÊst(@cpt as varchar(3))
> >
> > SET @sql = 'INSERT INTO table1 (article, sem, qte)
> > SELECT article,' +@cptstr+ ', MS'+@cptstr+
> > ' FROM Table2
> > WHERE typeLigne = ''5PREV'' and
> > prevision = 1'
> >
> > EXEC (@sql)
> >
> > SET @cpt = @cpt+1
> >
> >END
> >
> >Ce code fonctionne. En revanche, au niveau des performances c'est pas
> >génial. Je pense que cela vient du fait que la procédure n'est pas
compilée
> >(sql dynamique)
> >Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
> >dynamique? et donc améliorer les performances
> >
> >merci pour votre analyse
> >
> >
> >
> >
> >
Il faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" a écrit dans le message de
news:
> Pierre-Yves,
>
> N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
> nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
>
> select
> article,
> i,
> case
> when i = 0 then MS0
> when i = 1 then MS1
> when i = 2 then MS2
> ...
> when i = 52 then MS52 end
> into destination
> from source, (
> select ProductID-1 from Northwind..Products
> where ProductID between 1 and 53
> ) N53
>
> -- puis créer les indexes, etc.
>
> [pas testée]
>
> Steve Kass
> Drew University
>
> Pierre-Yves wrote:
>
> >Bonjour,
> >voici le traitement que je souhaite mettre dans ma procédure stockée:
> >veux alimenter ma table destination à partir de ma table source. Dans
> >table source, il y a un enregistrement par article et les qtés sont
> >ventilées pour chaque semaine. Dans ma table destination, il y a un
> >enregistrement par article et par semaine
> >
> >table source : article MS0 MS1 MS2 .... MS52
> >(table2) A 50 30 65
> >
> >table destination : article sem qte
> >(table1) A 0 50
> > A 1 30
> > A 2 65
> >
> >code que j'ai essayé dans ma procédure stockée:
> >SET @cpt = 0
> >
> >WHILE @cpt < 53
> >
> >BEGIN
> >
> > SET @cptstrÊst(@cpt as varchar(3))
> >
> > SET @sql = 'INSERT INTO table1 (article, sem, qte)
> > SELECT article,' +@cptstr+ ', MS'+@cptstr+
> > ' FROM Table2
> > WHERE typeLigne = ''5PREV'' and
> > prevision = 1'
> >
> > EXEC (@sql)
> >
> > SET @cpt = @cpt+1
> >
> >END
> >
> >Ce code fonctionne. En revanche, au niveau des performances c'est pas
> >génial. Je pense que cela vient du fait que la procédure n'est pas
compilée
> >(sql dynamique)
> >Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
> >dynamique? et donc améliorer les performances
> >
> >merci pour votre analyse
> >
> >
> >
> >
> >
Il faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" <skass@drew.edu> a écrit dans le message de
news:edxf5ekeEHA.712@TK2MSFTNGP09.phx.gbl...
> Pierre-Yves,
>
> N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
> nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
>
> select
> article,
> i,
> case
> when i = 0 then MS0
> when i = 1 then MS1
> when i = 2 then MS2
> ...
> when i = 52 then MS52 end
> into destination
> from source, (
> select ProductID-1 from Northwind..Products
> where ProductID between 1 and 53
> ) N53
>
> -- puis créer les indexes, etc.
>
> [pas testée]
>
> Steve Kass
> Drew University
>
> Pierre-Yves wrote:
>
> >Bonjour,
> >voici le traitement que je souhaite mettre dans ma procédure stockée:
> >veux alimenter ma table destination à partir de ma table source. Dans
> >table source, il y a un enregistrement par article et les qtés sont
> >ventilées pour chaque semaine. Dans ma table destination, il y a un
> >enregistrement par article et par semaine
> >
> >table source : article MS0 MS1 MS2 .... MS52
> >(table2) A 50 30 65
> >
> >table destination : article sem qte
> >(table1) A 0 50
> > A 1 30
> > A 2 65
> >
> >code que j'ai essayé dans ma procédure stockée:
> >SET @cpt = 0
> >
> >WHILE @cpt < 53
> >
> >BEGIN
> >
> > SET @cptstrÊst(@cpt as varchar(3))
> >
> > SET @sql = 'INSERT INTO table1 (article, sem, qte)
> > SELECT article,' +@cptstr+ ', MS'+@cptstr+
> > ' FROM Table2
> > WHERE typeLigne = ''5PREV'' and
> > prevision = 1'
> >
> > EXEC (@sql)
> >
> > SET @cpt = @cpt+1
> >
> >END
> >
> >Ce code fonctionne. En revanche, au niveau des performances c'est pas
> >génial. Je pense que cela vient du fait que la procédure n'est pas
compilée
> >(sql dynamique)
> >Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
> >dynamique? et donc améliorer les performances
> >
> >merci pour votre analyse
> >
> >
> >
> >
> >
Il faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" <skass@drew.edu> a écrit dans le message de
news:edxf5ekeEHA.712@TK2MSFTNGP09.phx.gbl...
> Pierre-Yves,
>
> N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
> nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
>
> select
> article,
> i,
> case
> when i = 0 then MS0
> when i = 1 then MS1
> when i = 2 then MS2
> ...
> when i = 52 then MS52 end
> into destination
> from source, (
> select ProductID-1 from Northwind..Products
> where ProductID between 1 and 53
> ) N53
>
> -- puis créer les indexes, etc.
>
> [pas testée]
>
> Steve Kass
> Drew University
>
> Pierre-Yves wrote:
>
> >Bonjour,
> >voici le traitement que je souhaite mettre dans ma procédure stockée:
> >veux alimenter ma table destination à partir de ma table source. Dans
> >table source, il y a un enregistrement par article et les qtés sont
> >ventilées pour chaque semaine. Dans ma table destination, il y a un
> >enregistrement par article et par semaine
> >
> >table source : article MS0 MS1 MS2 .... MS52
> >(table2) A 50 30 65
> >
> >table destination : article sem qte
> >(table1) A 0 50
> > A 1 30
> > A 2 65
> >
> >code que j'ai essayé dans ma procédure stockée:
> >SET @cpt = 0
> >
> >WHILE @cpt < 53
> >
> >BEGIN
> >
> > SET @cptstrÊst(@cpt as varchar(3))
> >
> > SET @sql = 'INSERT INTO table1 (article, sem, qte)
> > SELECT article,' +@cptstr+ ', MS'+@cptstr+
> > ' FROM Table2
> > WHERE typeLigne = ''5PREV'' and
> > prevision = 1'
> >
> > EXEC (@sql)
> >
> > SET @cpt = @cpt+1
> >
> >END
> >
> >Ce code fonctionne. En revanche, au niveau des performances c'est pas
> >génial. Je pense que cela vient du fait que la procédure n'est pas
compilée
> >(sql dynamique)
> >Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
> >dynamique? et donc améliorer les performances
> >
> >merci pour votre analyse
> >
> >
> >
> >
> >
Il faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" a écrit dans le message de
news:
> Pierre-Yves,
>
> N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
> nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
>
> select
> article,
> i,
> case
> when i = 0 then MS0
> when i = 1 then MS1
> when i = 2 then MS2
> ...
> when i = 52 then MS52 end
> into destination
> from source, (
> select ProductID-1 from Northwind..Products
> where ProductID between 1 and 53
> ) N53
>
> -- puis créer les indexes, etc.
>
> [pas testée]
>
> Steve Kass
> Drew University
>
> Pierre-Yves wrote:
>
> >Bonjour,
> >voici le traitement que je souhaite mettre dans ma procédure stockée:
> >veux alimenter ma table destination à partir de ma table source. Dans
> >table source, il y a un enregistrement par article et les qtés sont
> >ventilées pour chaque semaine. Dans ma table destination, il y a un
> >enregistrement par article et par semaine
> >
> >table source : article MS0 MS1 MS2 .... MS52
> >(table2) A 50 30 65
> >
> >table destination : article sem qte
> >(table1) A 0 50
> > A 1 30
> > A 2 65
> >
> >code que j'ai essayé dans ma procédure stockée:
> >SET @cpt = 0
> >
> >WHILE @cpt < 53
> >
> >BEGIN
> >
> > SET @cptstrÊst(@cpt as varchar(3))
> >
> > SET @sql = 'INSERT INTO table1 (article, sem, qte)
> > SELECT article,' +@cptstr+ ', MS'+@cptstr+
> > ' FROM Table2
> > WHERE typeLigne = ''5PREV'' and
> > prevision = 1'
> >
> > EXEC (@sql)
> >
> > SET @cpt = @cpt+1
> >
> >END
> >
> >Ce code fonctionne. En revanche, au niveau des performances c'est pas
> >génial. Je pense que cela vient du fait que la procédure n'est pas
compilée
> >(sql dynamique)
> >Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
> >dynamique? et donc améliorer les performances
> >
> >merci pour votre analyse
> >
> >
> >
> >
> >
Il faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" a écrit dans le message de
news:
> Pierre-Yves,
>
> N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
> nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
>
> select
> article,
> i,
> case
> when i = 0 then MS0
> when i = 1 then MS1
> when i = 2 then MS2
> ...
> when i = 52 then MS52 end
> into destination
> from source, (
> select ProductID-1 from Northwind..Products
> where ProductID between 1 and 53
> ) N53
>
> -- puis créer les indexes, etc.
>
> [pas testée]
>
> Steve Kass
> Drew University
>
> Pierre-Yves wrote:
>
> >Bonjour,
> >voici le traitement que je souhaite mettre dans ma procédure stockée:
> >veux alimenter ma table destination à partir de ma table source. Dans
> >table source, il y a un enregistrement par article et les qtés sont
> >ventilées pour chaque semaine. Dans ma table destination, il y a un
> >enregistrement par article et par semaine
> >
> >table source : article MS0 MS1 MS2 .... MS52
> >(table2) A 50 30 65
> >
> >table destination : article sem qte
> >(table1) A 0 50
> > A 1 30
> > A 2 65
> >
> >code que j'ai essayé dans ma procédure stockée:
> >SET @cpt = 0
> >
> >WHILE @cpt < 53
> >
> >BEGIN
> >
> > SET @cptstrÊst(@cpt as varchar(3))
> >
> > SET @sql = 'INSERT INTO table1 (article, sem, qte)
> > SELECT article,' +@cptstr+ ', MS'+@cptstr+
> > ' FROM Table2
> > WHERE typeLigne = ''5PREV'' and
> > prevision = 1'
> >
> > EXEC (@sql)
> >
> > SET @cpt = @cpt+1
> >
> >END
> >
> >Ce code fonctionne. En revanche, au niveau des performances c'est pas
> >génial. Je pense que cela vient du fait que la procédure n'est pas
compilée
> >(sql dynamique)
> >Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
> >dynamique? et donc améliorer les performances
> >
> >merci pour votre analyse
> >
> >
> >
> >
> >
OK j'ai compris, cela fonctionne bien
Désormais, je veux faire le traitement inverse
table source : article sem qte
(table1) A 0 50
A 1 30
A 2 65
table destination : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
je veux alimenter la table destination à partir de la table source
J'ai réussi en faisant de la requête dynamique (insert puis update) mais ce
n'est pas performant.
Quelle autre solution me proposez-vous?
merci pour vos conseils
----- Original Message -----
From: "Pierre-Yves"
Newsgroups: microsoft.public.fr.sqlserver
Sent: Thursday, August 05, 2004 8:58 AM
Subject: Re: requête dynamiqueIl faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" a écrit dans le message de
news:Pierre-Yves,
N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
select
article,
i,
case
when i = 0 then MS0
when i = 1 then MS1
when i = 2 then MS2
...
when i = 52 then MS52 end
into destination
from source, (
select ProductID-1 from Northwind..Products
where ProductID between 1 and 53
) N53
-- puis créer les indexes, etc.
[pas testée]
Steve Kass
Drew University
Pierre-Yves wrote:Bonjour,
voici le traitement que je souhaite mettre dans ma procédure stockée:
Jeveux alimenter ma table destination à partir de ma table source. Dans
matable source, il y a un enregistrement par article et les qtés sont
ventilées pour chaque semaine. Dans ma table destination, il y a un
enregistrement par article et par semaine
table source : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
table destination : article sem qte
(table1) A 0 50
A 1 30
A 2 65
code que j'ai essayé dans ma procédure stockée:
SET @cpt = 0
WHILE @cpt < 53
BEGIN
SET @cptstrÊst(@cpt as varchar(3))
SET @sql = 'INSERT INTO table1 (article, sem, qte)
SELECT article,' +@cptstr+ ', MS'+@cptstr+
' FROM Table2
WHERE typeLigne = ''5PREV'' and
prevision = 1'
EXEC (@sql)
SET @cpt = @cpt+1
END
Ce code fonctionne. En revanche, au niveau des performances c'est pas
génial. Je pense que cela vient du fait que la procédure n'est pas
compilée(sql dynamique)
Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
dynamique? et donc améliorer les performances
merci pour votre analyse
"Pierre-Yves" a écrit dans le message de
news:Il faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" a écrit dans le message de
news:Pierre-Yves,
N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
select
article,
i,
case
when i = 0 then MS0
when i = 1 then MS1
when i = 2 then MS2
...
when i = 52 then MS52 end
into destination
from source, (
select ProductID-1 from Northwind..Products
where ProductID between 1 and 53
) N53
-- puis créer les indexes, etc.
[pas testée]
Steve Kass
Drew University
Pierre-Yves wrote:Bonjour,
voici le traitement que je souhaite mettre dans ma procédure stockée:
Jeveux alimenter ma table destination à partir de ma table source. Dans
matable source, il y a un enregistrement par article et les qtés sont
ventilées pour chaque semaine. Dans ma table destination, il y a un
enregistrement par article et par semaine
table source : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
table destination : article sem qte
(table1) A 0 50
A 1 30
A 2 65
code que j'ai essayé dans ma procédure stockée:
SET @cpt = 0
WHILE @cpt < 53
BEGIN
SET @cptstrÊst(@cpt as varchar(3))
SET @sql = 'INSERT INTO table1 (article, sem, qte)
SELECT article,' +@cptstr+ ', MS'+@cptstr+
' FROM Table2
WHERE typeLigne = ''5PREV'' and
prevision = 1'
EXEC (@sql)
SET @cpt = @cpt+1
END
Ce code fonctionne. En revanche, au niveau des performances c'est pas
génial. Je pense que cela vient du fait que la procédure n'est pas
compilée(sql dynamique)
Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
dynamique? et donc améliorer les performances
merci pour votre analyse
OK j'ai compris, cela fonctionne bien
Désormais, je veux faire le traitement inverse
table source : article sem qte
(table1) A 0 50
A 1 30
A 2 65
table destination : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
je veux alimenter la table destination à partir de la table source
J'ai réussi en faisant de la requête dynamique (insert puis update) mais ce
n'est pas performant.
Quelle autre solution me proposez-vous?
merci pour vos conseils
----- Original Message -----
From: "Pierre-Yves" <py_leteste@hotmail.com>
Newsgroups: microsoft.public.fr.sqlserver
Sent: Thursday, August 05, 2004 8:58 AM
Subject: Re: requête dynamique
Il faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" <skass@drew.edu> a écrit dans le message de
news:edxf5ekeEHA.712@TK2MSFTNGP09.phx.gbl...
Pierre-Yves,
N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
select
article,
i,
case
when i = 0 then MS0
when i = 1 then MS1
when i = 2 then MS2
...
when i = 52 then MS52 end
into destination
from source, (
select ProductID-1 from Northwind..Products
where ProductID between 1 and 53
) N53
-- puis créer les indexes, etc.
[pas testée]
Steve Kass
Drew University
Pierre-Yves wrote:
Bonjour,
voici le traitement que je souhaite mettre dans ma procédure stockée:
Je
veux alimenter ma table destination à partir de ma table source. Dans
ma
table source, il y a un enregistrement par article et les qtés sont
ventilées pour chaque semaine. Dans ma table destination, il y a un
enregistrement par article et par semaine
table source : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
table destination : article sem qte
(table1) A 0 50
A 1 30
A 2 65
code que j'ai essayé dans ma procédure stockée:
SET @cpt = 0
WHILE @cpt < 53
BEGIN
SET @cptstrÊst(@cpt as varchar(3))
SET @sql = 'INSERT INTO table1 (article, sem, qte)
SELECT article,' +@cptstr+ ', MS'+@cptstr+
' FROM Table2
WHERE typeLigne = ''5PREV'' and
prevision = 1'
EXEC (@sql)
SET @cpt = @cpt+1
END
Ce code fonctionne. En revanche, au niveau des performances c'est pas
génial. Je pense que cela vient du fait que la procédure n'est pas
compilée
(sql dynamique)
Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
dynamique? et donc améliorer les performances
merci pour votre analyse
"Pierre-Yves" <py_leteste@hotmail.com> a écrit dans le message de
news:ezMnjmreEHA.332@TK2MSFTNGP09.phx.gbl...
Il faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" <skass@drew.edu> a écrit dans le message de
news:edxf5ekeEHA.712@TK2MSFTNGP09.phx.gbl...
Pierre-Yves,
N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
select
article,
i,
case
when i = 0 then MS0
when i = 1 then MS1
when i = 2 then MS2
...
when i = 52 then MS52 end
into destination
from source, (
select ProductID-1 from Northwind..Products
where ProductID between 1 and 53
) N53
-- puis créer les indexes, etc.
[pas testée]
Steve Kass
Drew University
Pierre-Yves wrote:
Bonjour,
voici le traitement que je souhaite mettre dans ma procédure stockée:
Je
veux alimenter ma table destination à partir de ma table source. Dans
ma
table source, il y a un enregistrement par article et les qtés sont
ventilées pour chaque semaine. Dans ma table destination, il y a un
enregistrement par article et par semaine
table source : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
table destination : article sem qte
(table1) A 0 50
A 1 30
A 2 65
code que j'ai essayé dans ma procédure stockée:
SET @cpt = 0
WHILE @cpt < 53
BEGIN
SET @cptstrÊst(@cpt as varchar(3))
SET @sql = 'INSERT INTO table1 (article, sem, qte)
SELECT article,' +@cptstr+ ', MS'+@cptstr+
' FROM Table2
WHERE typeLigne = ''5PREV'' and
prevision = 1'
EXEC (@sql)
SET @cpt = @cpt+1
END
Ce code fonctionne. En revanche, au niveau des performances c'est pas
génial. Je pense que cela vient du fait que la procédure n'est pas
compilée
(sql dynamique)
Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
dynamique? et donc améliorer les performances
merci pour votre analyse
OK j'ai compris, cela fonctionne bien
Désormais, je veux faire le traitement inverse
table source : article sem qte
(table1) A 0 50
A 1 30
A 2 65
table destination : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
je veux alimenter la table destination à partir de la table source
J'ai réussi en faisant de la requête dynamique (insert puis update) mais ce
n'est pas performant.
Quelle autre solution me proposez-vous?
merci pour vos conseils
----- Original Message -----
From: "Pierre-Yves"
Newsgroups: microsoft.public.fr.sqlserver
Sent: Thursday, August 05, 2004 8:58 AM
Subject: Re: requête dynamiqueIl faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" a écrit dans le message de
news:Pierre-Yves,
N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
select
article,
i,
case
when i = 0 then MS0
when i = 1 then MS1
when i = 2 then MS2
...
when i = 52 then MS52 end
into destination
from source, (
select ProductID-1 from Northwind..Products
where ProductID between 1 and 53
) N53
-- puis créer les indexes, etc.
[pas testée]
Steve Kass
Drew University
Pierre-Yves wrote:Bonjour,
voici le traitement que je souhaite mettre dans ma procédure stockée:
Jeveux alimenter ma table destination à partir de ma table source. Dans
matable source, il y a un enregistrement par article et les qtés sont
ventilées pour chaque semaine. Dans ma table destination, il y a un
enregistrement par article et par semaine
table source : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
table destination : article sem qte
(table1) A 0 50
A 1 30
A 2 65
code que j'ai essayé dans ma procédure stockée:
SET @cpt = 0
WHILE @cpt < 53
BEGIN
SET @cptstrÊst(@cpt as varchar(3))
SET @sql = 'INSERT INTO table1 (article, sem, qte)
SELECT article,' +@cptstr+ ', MS'+@cptstr+
' FROM Table2
WHERE typeLigne = ''5PREV'' and
prevision = 1'
EXEC (@sql)
SET @cpt = @cpt+1
END
Ce code fonctionne. En revanche, au niveau des performances c'est pas
génial. Je pense que cela vient du fait que la procédure n'est pas
compilée(sql dynamique)
Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
dynamique? et donc améliorer les performances
merci pour votre analyse
"Pierre-Yves" a écrit dans le message de
news:Il faut tout de même faire une boucle WHILE pour incrémenter le i?
je ne vois pas bien à quoi sert le table N53
"Steve Kass" a écrit dans le message de
news:Pierre-Yves,
N'utilisez qu'une seule requête SELECT .. INTO, avec une table de
nombres entiers. (Vous n'avez pas expliqué 5PREV et [prevision]...)
select
article,
i,
case
when i = 0 then MS0
when i = 1 then MS1
when i = 2 then MS2
...
when i = 52 then MS52 end
into destination
from source, (
select ProductID-1 from Northwind..Products
where ProductID between 1 and 53
) N53
-- puis créer les indexes, etc.
[pas testée]
Steve Kass
Drew University
Pierre-Yves wrote:Bonjour,
voici le traitement que je souhaite mettre dans ma procédure stockée:
Jeveux alimenter ma table destination à partir de ma table source. Dans
matable source, il y a un enregistrement par article et les qtés sont
ventilées pour chaque semaine. Dans ma table destination, il y a un
enregistrement par article et par semaine
table source : article MS0 MS1 MS2 .... MS52
(table2) A 50 30 65
table destination : article sem qte
(table1) A 0 50
A 1 30
A 2 65
code que j'ai essayé dans ma procédure stockée:
SET @cpt = 0
WHILE @cpt < 53
BEGIN
SET @cptstrÊst(@cpt as varchar(3))
SET @sql = 'INSERT INTO table1 (article, sem, qte)
SELECT article,' +@cptstr+ ', MS'+@cptstr+
' FROM Table2
WHERE typeLigne = ''5PREV'' and
prevision = 1'
EXEC (@sql)
SET @cpt = @cpt+1
END
Ce code fonctionne. En revanche, au niveau des performances c'est pas
génial. Je pense que cela vient du fait que la procédure n'est pas
compilée(sql dynamique)
Y aurait-il un autre moyen de faire ce traitement pour éviter du sql
dynamique? et donc améliorer les performances
merci pour votre analyse