c# - 了解批量插入的 SQL Server 合并问题
问题描述
我生成一个,我首先从C# 中DataTable
删除所有行。DataTable
然后我将 DataTable 传递给批量插入的存储过程,但我随机收到错误消息:
Merge 语句多次更新/删除同一行。当目标行匹配多个源行时会发生这种情况。
但令我困惑的是,在将 DataTable 发送到存储过程之前,我从 DataTable 中删除了所有重复的行。
代码:
public static DataTable RemoveDuplicateRows(DataTable dTable, string colName)
{
Hashtable hTable = new Hashtable();
ArrayList duplicateList = new ArrayList();
//Add list of all the unique item value to hashtable, which stores combination of key, value pair.
//And add duplicate item value in arraylist.
foreach (DataRow drow in dTable.Rows)
{
if (hTable.Contains(drow[colName]))
duplicateList.Add(drow);
else
hTable.Add(drow[colName], string.Empty);
}
//Removing a list of duplicate items from datatable.
foreach (DataRow dRow in duplicateList)
dTable.Rows.Remove(dRow);
//Datatable which contains unique records will be return as output.
return dTable;
}
这是程序:
ALTER PROCEDURE [dbo].[Update_DataFeed_Discoverable]
@tblCustomers DateFeed_Discoverable READONLY
AS
BEGIN
SET NOCOUNT ON;
MERGE INTO DataFeed c1
USING @tblCustomers c2
ON c1.CheckSumProductName=checksum(c2.aw_deep_link)
WHEN MATCHED THEN
UPDATE SET
c1.merchant_name = c2.merchant_name
,c1.aw_deep_link = c2.aw_deep_link
,c1.brand_name = c2.brand_name
,c1.product_name = c2.product_name
,c1.merchant_image_url = c2.merchant_image_url
,c1.Price = c2.Price
WHEN NOT MATCHED THEN
INSERT VALUES(c2.merchant_name, c2.aw_deep_link,
c2.brand_name, c2.product_name, c2.merchant_image_url,
c2.Price,1,checksum(c2.aw_deep_link)
);
END
如果在使用 DataTable 之前未插入和删除它们,是否会出现重复行。
任何帮助表示赞赏。
解决方案
推荐阅读
- reactjs - Redux - 处理非常大的状态对象
- python - 如何让我的 if 语句在结果生成后在语句中运行代码?
- android - 是否可以在单个 Android Spannable 上添加 2 种颜色?
- javascript - 使用 jQuery 定位表行,其中包含值
- windows - 无需在启动或安装期间输入用户凭据即可启动或注册 Windows 服务
- sonarqube - 将 TeamCity 中的 DotCover 报告集成到 SonarQube 中?
- c# - 直接调用方法 - MakeGenericMethod
- javascript - 单元格表上的多个倒数计时器
- ios - Alamofire assertionFailure - needNewBodyStream 没有找到 UploadRequest
- mysql - 如何在一张表中按基于父母和孩子的顺序显示结果