2010-04-28 3 views
0

Je veux obtenir tous les enregistrements d'une table1 & les insérer dans la table2. Table1 & table2 sont dans des bases de données différentes, table1 et table2 sont même structure.Comment insérer tous les enregistrements dans une table seulement une fois

Normalement, j'obtiendrai tous les enregistrements de table1, et pour chaque enregistrement (foreach), je l'insèrerai dans la table2 en utilisant "INSERT ...". Je veux savoir un moyen d'effet d'insérer tous les enregistrements dans la table une seule fois sans foreach. J'utilise C#, .NET 2.0 & WinForm.

Merci.

Répondre

4

dans le code SQL que vous pouvez faire une commande SELECT dans le INSERT

INSERT INTO Table2 
(Id, Name, IsActive) 
SELECT Id, Name, IsActive 
FROM Table2 

Ou si vous faites dans le code, puis vérifier les SqlBulkCopy cl ass

  sqlConn.Open(); 
      using (var bulkCopy = new SqlBulkCopy(sqlConn)) 
      { 
       bulkCopy.DestinationTableName = "Table2"; 
       bulkCopy.WriteToServer(dataTable); 
      } 
      sqlConn.Close(); 
+0

'code sql' vs 'code', hey? =) Eh bien, +1 –

+0

+1 pour 2 solutions, mais vous avez oublié les champs d'identité dans le premier cas. Il est nécessaire de changer d'identité avant de l'insérer (vérifiez la solution de David Hedlund). –

+0

Bon point, mais il n'y avait rien dans la question pour indiquer qu'il/elle a des colonnes d'identité sur ces tables. – willbt

0

Si les deux bases de données sont hébergées sur le même Microsoft SQL Server, vous pouvez faire une croix-base de données de sélection pour copier les données sans avoir besoin dans beaucoup de code du tout ...

insert into database1.dbo.table1 
select * 
from database2.dbo.table2 

autorisations sont le plus délicat ...

0

Les deux bases de données peuvent-elles se parler? Dans ce cas, oubliez C# et créez une requête ressemblant à ceci:

use db2 

SET IDENTITY_INSERT Table2 ON 

INSERT INTO Table2 
    SELECT * FROM db1.dbo.Table1 

SET IDENTITY_INSERT Table2 OFF 
Questions connexes