2 votes

Boucle dans une table temporaire et insertion dans une autre table

J'ai besoin d'insérer les données d'un fichier csv dans une table temporaire et d'insérer des données pour la valeur id correspondante dans une autre table. J'ai créé et inséré les données dans le fichier csv. Pour tous les enregistrements dans le fichier csv, comment puis-je boucler et insérer des données pour l'enregistrement correspondant dans l'autre table.

CREATE TABLE #tbcompanies
(ID INT)
GO

BULK
INSERT #tbcompanies
FROM 'd:\ids.csv'
WITH
(
ROWTERMINATOR = '\n'
)

select * from #tbcompanies

drop table #tbcompanies

6voto

Andomar Points 115404

En supposant que les deux tables ont une colonne ID, vous pourriez mettre à jour l'autre table comme suit :

update  ot
set     col1 = tmp.col1
.       col2 = tmp.col2
from    @tbcompanies tmp
join    OtherTable ot
on      ot.ID = tmp.ID

Si en plus de la mise à jour, vous souhaitez insert des rangées qui n'existent pas, considérez le déclaration de fusion :

; merge OtherTable as target
using   #tmpcompanies as source
on      target.id = source.id 
when    not matched by target then
        insert (id, col1, col2) values (source.id, source.col1, source.col2)
when    matched then
        update set col1 = source.col1, col2 = source.col2;

1voto

Mithrandir Points 10545

Vous n'avez pas besoin de boucler quoi que ce soit, puisque vous utilisez SQL Server 2008 et que cette version prend en charge la fonction MERGE déclaration.

Jetez un coup d'œil aquí .

Ou simplement utiliser la mise à jour avec une clause from et joindre les deux tables.

1voto

Me.Name Points 3103

Si vous avez besoin d'une fonctionnalité d'upsert, je vous recommande fortement l'application Fusionner fonction.

pseudo code

   merge TargetTableName target
   using #tbcompanies tmp on tmp.idfield=target.idfield
   when matched then update......
   when not matched then insert...........

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X