在SQL批量复制期间检查数据库中数据是否存在的任何方式

问题描述 投票:1回答:3

我正在将一些数据从一个SQL Server数据库复制到另一个SQL Server数据库。

效果很好,我需要检查是否已存在某些数据,然后再将其复制。我怎样才能做到这一点?有什么建议么?

string Source = ConfigurationManager.ConnectionStrings["Db1"].ConnectionString;
string Destination = ConfigurationManager.ConnectionStrings["Db2"].ConnectionString;

using (SqlConnection sourceCon = new SqlConnection(Source))
{
    SqlCommand cmd = new SqlCommand("SELECT [Id],[Client] FROM [Db1].[dbo].[Client]", sourceCon);
    sourceCon.Open();

    using (SqlDataReader rdr = cmd.ExecuteReader())
    {
        using (SqlConnection destCon = new SqlConnection(Destination))
        {
            using (SqlBulkCopy bc = new SqlBulkCopy(destCon))
            {
                    bc.DestinationTableName = "Clients";
                    bc.ColumnMappings.Add("Id", "ClientId");
                    bc.ColumnMappings.Add("Client", "Client");
                    destCon.Open();

                    bc.WriteToServer(rdr);
            }
        }
    }
}
c# sql-server sqlbulkcopy
3个回答
2
投票

要做的一种方法是将副本批量复制到staging表(具有相似布局的另一个表),然后从该临时表执行有条件的插入到实际表中。” >

您还可以使用表值参数代替SqlBulkCopy来执行类似的操作,并将表值参数视为登台表。


0
投票

将所有表作为临时表从源数据库复制到目标数据库,然后运行SQL将缺少的记录从临时表添加到目标表。删除临时表的最后一步。


0
投票

您可以建立从源数据库到目标数据库的链接,并运行查询来确定需要传输哪些行,但是请注意不要在链接上拖动太多数据,因为这可能会使过程缓慢,实际上只需要。您将用来确定源中的行是否等于目标中的行的列

© www.soinside.com 2019 - 2024. All rights reserved.