sqlserver合并DataTable并排除重复数据的通用方法分享

代码如下:

复制代码 代码如下:

///<summary>

/// 将两个列不同的DataTable合并成一个新的DataTable

///</summary>

///<param name="dt1">源表</param>

///<param name="dt2">需要合并的表</param>

///<param name="primaryKey">需要排重列表(为空不排重)</param>

///<param name="maxRows">合并后Table的最大行数</param>

///<returns>合并后的datatable</returns>

public static DataTable MergeDataTable(DataTable dt1, DataTable dt2, string primaryKey, int maxRows)

{

//判断是否需要合并

if (dt1 == null && dt2 == null)

{

return null;

}

if (dt1 == null && dt2 != null)

{

return dt2.Copy();

}

else if (dt1 != null && dt2 == null)

{

return dt1.Copy();

}

//复制dt1的数据

DataTable dt = dt1.Copy();

//补充dt2的结构(dt1中没有的列)到dt中

for (int i = 0; i < dt2.Columns.Count; i++)

{

string cName = dt2.Columns[i].ColumnName;

if (!dt.Columns.Contains(cName))

{

dt.Columns.Add(new DataColumn(cName));

}

}

//复制dt2的数据

if (dt2.Rows.Count > 0)

{

Type t = dt2.Rows[0][primaryKey].GetType();

bool isNeedFilter = string.IsNullOrEmpty(primaryKey) ? false : true;

bool isNeedQuotes = t.Name == "String" ? true : false;

int mergeTableNum = dt.Rows.Count;

for (int i = 0; i < dt2.Rows.Count && mergeTableNum < maxRows; i++)

{

bool isNeedAdd = true;

//如果需要排重时,判断是否需要添加当前行

if (isNeedFilter)

{

string primaryValue = dt2.Rows[i][primaryKey].ToString();

string fileter = primaryKey + "=" + primaryValue;

if(isNeedQuotes)

{

fileter = primaryKey + "='" + primaryValue + "'";

}

DataRow[] drs = dt.Select(fileter);

if (drs != null && drs.Length > 0)

{

isNeedAdd = false;

}

}

//添加数据

if (isNeedAdd)

{

DataRow dr = dt.NewRow();

for (int j = 0; j < dt.Columns.Count; j++)

{

string cName = dt.Columns[j].ColumnName;

if (dt2.Columns.Contains(cName))

{

//防止因同一字段不同类型赋值出错

if (dt2.Rows[i][cName] != null && dt2.Rows[i][cName] != DBNull.Value && dt2.Rows[i][cName].ToString() != "")

{

dr[cName] = dt2.Rows[i][cName];

}

}

}

dt.Rows.Add(dr);

mergeTableNum++;

}

}

}

return dt;

}

时间: 2024-07-28 19:32:15

sqlserver合并DataTable并排除重复数据的通用方法分享的相关文章

sql删除重复数据的详细方法

  重复数据,通常有两种:一是完全重复的记录,也就是所有字段的值都一样;二是部分字段值重复的记录. 一. 删除完全重复的记录 完全重复的数据,通常是由于没有设置主键/唯一键约束导致的. 测试数据: if OBJECT_ID('duplicate_all') is not null drop table duplicate_all GO create table duplicate_all ( c1 int, c2 int, c3 varchar(100) ) GO insert into dup

sql删除重复数据的详细方法_MsSql

一. 删除完全重复的记录 完全重复的数据,通常是由于没有设置主键/唯一键约束导致的.测试数据: 复制代码 代码如下: if OBJECT_ID('duplicate_all') is not nulldrop table duplicate_all GO create table duplicate_all ( c1 int, c2 int, c3 varchar(100) ) GO insert into duplicate_all select 1,100,'aaa' union allse

MySQL中删除重复数据的简单方法_Mysql

MYSQL里有五百万数据,但大多是重复的,真实的就180万,于是想怎样把这些重复的数据搞出来,在网上找了一圈,好多是用NOT IN这样的代码,这样效率很低,自己琢磨组合了一下,找到一个高效的处理方式,用这个方式,五百万数据,十来分钟就全部去除重复了,请各位参考. 第一步:从500万数据表data_content_152里提取出不重复的字段SFZHM对应的ID字段到TMP3表 create table tmp3 as select min(id) as col1 from data_content

使用aggregate在MongoDB中查询重复数据记录的方法_MongoDB

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). aggregate() 方法 MongoDB中聚合的方法使用aggregate(). 语法 aggregate() 方法的基本语法格式如下所示: >db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION) 我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们

在Excel中查找重复数据与删除方法

俺用Excel管理学生的成绩,俺想把同名学生的成绩数据突出显示出来(改变字体和单元格填充颜色),俺用"条件格式"来实现. 1. 启动Excel 2003(基本版本相似),打开学生成绩表. 2. 同时选中数据所在的单元格区域(如B2至J2001),执行"格式→条件格式"命令,打开"条件格式"对话框. 3. 单击最左侧方框右边的下拉按钮,在随后弹出的下拉列表中选择"公式"选项,然后在后面的方框中输入公式:=COUNTIF($B$2

Hive RCFile合并作业为什么产生重复数据

前几天有DW用户反馈,在往一张表(RCFile表)中用"insert overwrite table partition(xx) select ..." 插入数据的时候,会产生重复文件.看了下这个作业log,发现map task 000005起了两个task attempt ,第二个attempt是推测执行,并且这两个attemp都在task close函数里面重命名temp文件成正式文件,而不是通过mapreduce框架的两阶段提交协议(two phrase commit proto

php数组对百万数据进行排除重复数据的实现代码_php技巧

假如得到一个uid列表,数量在百万行以上,格式如下: 复制代码 代码如下: 10001000 10001001 10001002 ...... 10001000 ...... 10001111 其实利用php数组的特性,很好进行排重,我们先来看一下php数组的定义:PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性.数组元素

合并两个DataSet的数据内容的方法_实用技巧

Default.aspx 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/

sql过滤重复数据几种方法

在开发中经常会碰到关于有重复记录的数据,我们重想办法来过滤一些重复的记录,下面我总结了几种方法,希望对大家有用. 方法一,   select identity(int,1,1) as id,* into #temp from tabel select * from #temp where id in ( select max(id) from #emp where having count(*)>1 group by col1,col2,col3...) 实例 有一个表的结构是这样的