首页 > 解决方案 > 在 SQL 大容量复制期间检查数据库中是否存在数据的任何方法

问题描述

我正在将一些数据从一个 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-serversqlbulkcopy

解决方案


一种方法是批量复制到临时表(具有类似布局的单独表)中,然后从临时表执行条件插入到实际表中。

您也可以使用 table-valued-parameter 而不是 执行类似的操作SqlBulkCopy,并将 table-valued-parameter 视为临时表。


推荐阅读