OVH Cloud OVH Cloud

insert de plusieurs tables vers une

4 réponses
Avatar
dom
Bonjour,

j'ai la problématique suivante dont je n'arrive pas à me
dépatouiller....

J'ai une table qui me liste des noms de tables de mêmes structures (
ces noms peuvent changer )

je voudrais peupler une autre table ayant une structure correspondante
à ces tables avec les informations contenues dans chacune d'elles

j'ai essayer de chercher avec l'affectation d'une variable et une
boucle mais je n'arrive à rien de concret.

si quelqu'un pouvait m'aider cela m'enleverait une grosse épine du
pied.
Merci d'avance

D

4 réponses

Avatar
bruno reiter [MVP]
ce n'est pas etout à fait clair, mais peut-etre :

une boucle while ou un curseur sur la table des noms de table
avec un exec dynamique
exec ('insert tab select c1, c2 from ' + @tab1 )

voir aide pour détails

br

wrote in message news:
Bonjour,

j'ai la problématique suivante dont je n'arrive pas à me
dépatouiller....

J'ai une table qui me liste des noms de tables de mêmes structures (
ces noms peuvent changer )

je voudrais peupler une autre table ayant une structure correspondante
à ces tables avec les informations contenues dans chacune d'elles

j'ai essayer de chercher avec l'affectation d'une variable et une
boucle mais je n'arrive à rien de concret.

si quelqu'un pouvait m'aider cela m'enleverait une grosse épine du
pied.
Merci d'avance

D


Avatar
dom
Merci bruno
j'ai essayé déjà mais j'ai peut être du mal avec la syntaxe..
La table1 stocke le nom de mes différentes tables et la table2 doit
stocker les données provenant de ces différentes tables.
Ci après ce que j'ai écrit. Merci d'avance de tes lumières

DECLARE @NUM int
DECLARE @MAX int
DECLARE @TAB varchar(25)
SET @NUM=1
SET @MAX=(select max(num) from prod.dbo.TAB1)

table_loop:
IF @num<@MAX or @NUM=@MAX
BEGIN
SET @TAB=(select name from prod.dbo.TAB1 where num=@num)
INSERT INTO tab2
select * from
where datepart(year,date)Útepart(year,getdate())
and datepart(month,date)Útepart(month,getdate())
and datepart(day,hiscalldate)Útepart(day,getdate())
GO

SET @NUM=@NUM+1
GOTO table_loop
END

ELSE
END

On Tue, 6 Jan 2004 09:09:14 +0100, "bruno reiter [MVP]"
wrote:

ce n'est pas etout à fait clair, mais peut-etre :

une boucle while ou un curseur sur la table des noms de table
avec un exec dynamique
exec ('insert tab select c1, c2 from ' + @tab1 )

voir aide pour détails

br

wrote in message news:
Bonjour,

j'ai la problématique suivante dont je n'arrive pas à me
dépatouiller....

J'ai une table qui me liste des noms de tables de mêmes structures (
ces noms peuvent changer )

je voudrais peupler une autre table ayant une structure correspondante
à ces tables avec les informations contenues dans chacune d'elles

j'ai essayer de chercher avec l'affectation d'une variable et une
boucle mais je n'arrive à rien de concret.

si quelqu'un pouvait m'aider cela m'enleverait une grosse épine du
pied.
Merci d'avance

D





Avatar
bruno reiter [MVP]
dans ta boucle :

EXEC ('INSERT INTO tab2 select * from bd1.dbo.' + @TAB + ' where
datepart(year,date) = datepart(year,getdate()) and datepart(month,date) datepart(month,getdate()) and datepart(day,hiscalldate) datepart(day,getdate())')

tu peux aussi éviter d'utiliser * et mettre les noms des colonnes

br

wrote in message news:
Merci bruno
j'ai essayé déjà mais j'ai peut être du mal avec la syntaxe..
La table1 stocke le nom de mes différentes tables et la table2 doit
stocker les données provenant de ces différentes tables.
Ci après ce que j'ai écrit. Merci d'avance de tes lumières

DECLARE @NUM int
DECLARE @MAX int
DECLARE @TAB varchar(25)
SET @NUM=1
SET @MAX=(select max(num) from prod.dbo.TAB1)

table_loop:
IF @num<@MAX or @NUM=@MAX
BEGIN
SET @TAB=(select name from prod.dbo.TAB1 where num=@num)
INSERT INTO tab2
select * from
where datepart(year,date)Útepart(year,getdate())
and datepart(month,date)Útepart(month,getdate())
and datepart(day,hiscalldate)Útepart(day,getdate())
GO

SET @NUM=@NUM+1
GOTO table_loop
END

ELSE
END

On Tue, 6 Jan 2004 09:09:14 +0100, "bruno reiter [MVP]"
wrote:

>ce n'est pas etout à fait clair, mais peut-etre :
>
>une boucle while ou un curseur sur la table des noms de table
>avec un exec dynamique
>exec ('insert tab select c1, c2 from ' + @tab1 )
>
>voir aide pour détails
>
>br
>
> wrote in message


news:
>> Bonjour,
>>
>> j'ai la problématique suivante dont je n'arrive pas à me
>> dépatouiller....
>>
>> J'ai une table qui me liste des noms de tables de mêmes structures (
>> ces noms peuvent changer )
>>
>> je voudrais peupler une autre table ayant une structure correspondante
>> à ces tables avec les informations contenues dans chacune d'elles
>>
>> j'ai essayer de chercher avec l'affectation d'une variable et une
>> boucle mais je n'arrive à rien de concret.
>>
>> si quelqu'un pouvait m'aider cela m'enleverait une grosse épine du
>> pied.
>> Merci d'avance
>>
>> D
>



Avatar
dom
Merci Bruno
j'ai essayé mais il me met les messages suivants :
Serveur : Msg 170, Niveau 15, État 1, Ligne 20
Line 20: Incorrect syntax near ')'.
correspond à la fin de l'exec...
Serveur : Msg 137, Niveau 15, État 1, Ligne 5
Must declare the variable '@NUM'.
je la déclare pourtant ...

Je suis j'avoue un peu perdu!

Merci de ton aide


On Tue, 6 Jan 2004 14:44:31 +0100, "bruno reiter [MVP]"
wrote:

dans ta boucle :

EXEC ('INSERT INTO tab2 select * from bd1.dbo.' + @TAB + ' where
datepart(year,date) = datepart(year,getdate()) and datepart(month,date) >datepart(month,getdate()) and datepart(day,hiscalldate) >datepart(day,getdate())')

tu peux aussi éviter d'utiliser * et mettre les noms des colonnes

br

wrote in message news:
Merci bruno
j'ai essayé déjà mais j'ai peut être du mal avec la syntaxe..
La table1 stocke le nom de mes différentes tables et la table2 doit
stocker les données provenant de ces différentes tables.
Ci après ce que j'ai écrit. Merci d'avance de tes lumières

DECLARE @NUM int
DECLARE @MAX int
DECLARE @TAB varchar(25)
SET @NUM=1
SET @MAX=(select max(num) from prod.dbo.TAB1)

table_loop:
IF @num<@MAX or @NUM=@MAX
BEGIN
SET @TAB=(select name from prod.dbo.TAB1 where num=@num)
INSERT INTO tab2
select * from
where datepart(year,date)Útepart(year,getdate())
and datepart(month,date)Útepart(month,getdate())
and datepart(day,hiscalldate)Útepart(day,getdate())
GO

SET @NUM=@NUM+1
GOTO table_loop
END

ELSE
END

On Tue, 6 Jan 2004 09:09:14 +0100, "bruno reiter [MVP]"
wrote:

>ce n'est pas etout à fait clair, mais peut-etre :
>
>une boucle while ou un curseur sur la table des noms de table
>avec un exec dynamique
>exec ('insert tab select c1, c2 from ' + @tab1 )
>
>voir aide pour détails
>
>br
>
> wrote in message


news:
>> Bonjour,
>>
>> j'ai la problématique suivante dont je n'arrive pas à me
>> dépatouiller....
>>
>> J'ai une table qui me liste des noms de tables de mêmes structures (
>> ces noms peuvent changer )
>>
>> je voudrais peupler une autre table ayant une structure correspondante
>> à ces tables avec les informations contenues dans chacune d'elles
>>
>> j'ai essayer de chercher avec l'affectation d'une variable et une
>> boucle mais je n'arrive à rien de concret.
>>
>> si quelqu'un pouvait m'aider cela m'enleverait une grosse épine du
>> pied.
>> Merci d'avance
>>
>> D
>