Quickest way to insert records from one db into another

Hi,

I have a DataTable entitled "dtSource" from database 'A'.  I would like to push the data into database 'B'.  Both databases are SQL Server 2005 and both table schemas are the same.

I suppose I could loop through the rows like so:

string sql = "";
foreach(DataRow dr in dt.Rows)
{
    sql += "INSERT INTO...."
    sql += dr[0].ToString() + ", ";
    etc....
}

There has to be a faster and/or more of an elegant way of doing this.

Thanks
LVL 7
brdrokAsked:
Who is Participating?
 
topdog770Connect With a Mentor Commented:

foreach(DataRow dr in dt.Rows)
{
    myDestinationDataTable.ImportRow(dr);
}

Then you can use Update to populate the second database



0
 
topdog770Commented:
Let me know if you would like a bit more detail or if this is just the nudge you were looking for
0
 
strickddCommented:
Just execute the following SQL

sql = "Insert INTO dbo.A.dtSource " +
     "SELECT * FROM dbo.b.dtSource";
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
strickddCommented:
This is quicker and cleaner because SQL can process it faster than ASP.Net code can loop through a DataTable.
0
 
brdrokAuthor Commented:
Thank you for this informational gold nugget...

I feel kind of silly asking this but I have a table with 40+ columns, is there anyway to just call the Update() without having to specify a gazillion parameters like the following?

// Create the InsertCommand.
   command = new SqlCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (@CustomerID, @CompanyName)", connection);

    // Add the parameters for the InsertCommand.
    command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
    command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");

thanks
0
 
brdrokAuthor Commented:
// Add the parameters for the InsertCommand.
    command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, dr["CustomerID"]);
    command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, dr["CompanyName"]);

etc
0
 
strickddConnect With a Mentor Commented:
If you are JUST inserting information the code I gave you will not require ANY parameters. If you JUST need to update then i believe this format will work:

UPDATE <table_name> <alias>
SET (<column_name>,<column_name> ) = (
   SELECT (<column_name>, <column_name>)
   FROM <table_name>
   WHERE <alias.column_name> = <alias.column_name>);


if you need to do both, you will need to find out which rows you are inserting and the run an insert on those rows after the update.
0
 
topdog770Commented:
In Oracle, you would need to have a database link enabled to copy data from one database to another.
If you can copy from db to db directly in MS SQL then strickdd's approach is a good one


In this approach
===================
foreach(DataRow dr in dt.Rows)
{
    myDestinationDataTable.ImportRow(dr);
}
====================

1. Use an OleDataAdapter to fill the source table
2. Use an OleDataAdapter to set the schema in the destination table
3. Populate the destination table by using the import row approach
4. call the OleDataAdapter's Update for the destination table and you should be set.
You will not have to specifiy any parameters at all.



0
 
strickddCommented:
topdog770,
    If you read the initial question it is clearly stated that "Both databases are SQL Server 2005".
0
 
brdrokAuthor Commented:
Gentleman...thank you very much.  Learned quite a bit today.  

The only thing I had to add is the SetAdded() method

foreach(DataRow dr in dt.Rows)
{
    dr.SetAdded();
    myDestinationDataTable.ImportRow(dr);
}

otherwise my Update() wouldn't be able to find any records to insert.

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.