c# - 在 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);
}
}
}
}
解决方案
一种方法是批量复制到临时表(具有类似布局的单独表)中,然后从临时表执行条件插入到实际表中。
您也可以使用 table-valued-parameter 而不是 执行类似的操作SqlBulkCopy
,并将 table-valued-parameter 视为临时表。
推荐阅读
- angular - 如何使用以下 HTTP 请求从服务器获取数据
- node.js - Wolkenkit 无法以“错误:无法获得最低处理位置”开始。
- python - 尝试从日期时间中减去天数并将其转换为字符串
- javascript - 如何处理 msToBlob 在 IE 上产生安全错误?
- node.js - 客户端无法连接到 ssl socket.io
- php - Google API 获取用户电子邮件 PHP
- java - GetCostAndUsageWithResources 方法在 JAVA SDK 中不可用
- visual-studio - Visual Studio .rc 文件编码问题
- android - firebase 存储未在子 android 上创建新文件夹
- java - 如何使用 RecyclerView 滚动屏幕并逐步加载 RecyclerView 项目?