Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Quickest way to insert records from one db into another

Posted on 2006-10-20
10
Medium Priority
?
220 Views
Last Modified: 2010-04-16
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
0
Comment
Question by:brdrok
  • 4
  • 3
  • 3
10 Comments
 
LVL 12

Accepted Solution

by:
topdog770 earned 1200 total points
ID: 17775093

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

Then you can use Update to populate the second database



0
 
LVL 12

Expert Comment

by:topdog770
ID: 17775098
Let me know if you would like a bit more detail or if this is just the nudge you were looking for
0
 
LVL 28

Expert Comment

by:strickdd
ID: 17775369
Just execute the following SQL

sql = "Insert INTO dbo.A.dtSource " +
     "SELECT * FROM dbo.b.dtSource";
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 28

Expert Comment

by:strickdd
ID: 17775373
This is quicker and cleaner because SQL can process it faster than ASP.Net code can loop through a DataTable.
0
 
LVL 7

Author Comment

by:brdrok
ID: 17775428
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
 
LVL 7

Author Comment

by:brdrok
ID: 17775445
// 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
 
LVL 28

Assisted Solution

by:strickdd
strickdd earned 800 total points
ID: 17775603
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
 
LVL 12

Expert Comment

by:topdog770
ID: 17775685
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
 
LVL 28

Expert Comment

by:strickdd
ID: 17775878
topdog770,
    If you read the initial question it is clearly stated that "Both databases are SQL Server 2005".
0
 
LVL 7

Author Comment

by:brdrok
ID: 17776695
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

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
In a question here at Experts Exchange (https://www.experts-exchange.com/questions/29062564/Adobe-acrobat-reader-DC.html), a member asked how to create a signature in Adobe Acrobat Reader DC (the free Reader product, not the paid, full Acrobat produ…
Whether it be Exchange Server Crash Issues, Dirty Shutdown Errors or Failed to mount error, Stellar Phoenix Mailbox Exchange Recovery has always got your back. With the help of its easy to understand user interface and 3 simple steps recovery proced…
Suggested Courses
Course of the Month13 days, 15 hours left to enroll

581 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question