第一个DataTable,数据如下:编号 姓名
1 王XX第二个DataTable,数据如下:编号 年龄
1 20——————————————
我想通过合并组成一个新的DataTable,效果如下:编号 姓名 年龄
1 王XX 20——————————————请问该如何实现?
1 王XX第二个DataTable,数据如下:编号 年龄
1 20——————————————
我想通过合并组成一个新的DataTable,效果如下:编号 姓名 年龄
1 王XX 20——————————————请问该如何实现?
如果两个表结构一样的话,可以用DataSet.Merge来做,
不过楼主的,最直接的不考虑技术含量的就是循环了 ...
set QUOTED_IDENTIFIER ON
GOCREATE PROCEDURE [dbo].[存储过程名]
@data1 varchar(50)
As
BEGIN
SET NOCOUNT ON
SELECT [table1].attribute1, [table2]attribute2
FROM [table1] inner join [table2]
ON [table1].attribute3=[table2].attribute3
WHERE 查询条件
END
select tb1.编号, tb1.姓名, tb2.年龄 from tb1, tb2
where tb1.编号=tb2.编号C#:
dt1.Columns.Add("年龄");
DataRow[] rows;
foreach(DataRow row in dt1.Rows){
rows = dt2.Select("编号="+row["编号"]);
if(rows.Length>0)row["年龄"] = rows[0]["年龄"];
}
for(int i=0;i!=dt2.Rows.count;i++)
{
dt1.rows[i][2]=dt2.rows[i][1]
}
我做了一个专门针对楼主这种情况的函数MergeDataTable()楼主可以这样调用:
Dt1 = MergeDataTable(Dt1, Dt2, "ID");下面是函数定义:private DataTable MergeDataTable(DataTable dt1, DataTable dt2, String KeyColName)
{
//定义临时变量
DataTable dtReturn = new DataTable();
int i=0;
int j=0;
int k=0;
int colKey1=0;
int colKey2=0; //设定表dtReturn的名字
dtReturn.TableName = dt1.TableName;
//设定表dtReturn的列名
for(i=0; i<dt1.Columns.Count; i++){
if( dt1.Columns[i].ColumnName == KeyColName ){
colKey=i;
}
dtReturn.Columns.Add( dt1.Columns[i].ColumnName );
}
for(j=0; j<dt2.Columns.Count; j++){
if( dt1.Columns[j].ColumnName == KeyColName ){
colKey2=j;
continue;
}
dtReturn.Columns.Add( dt2.Columns[j].ColumnName );
}
//建立表的空间
for(i=0; i<dt1.Rows.Count; i++){
DataRow dr;
dr = dtReturn.NewRow();
dtReturn.Rows.Add(dr);
}
//将表dt1,dt2的数据写入dtReturn
for(i=0; i<dt1.Rows.Count; i++){
int m=-1;
//表dt1的第i行数据拷贝到dtReturn中去
for(j=0; j<dt1.Columns.Count; j++){
dtReturn.Rows[i][j] = dt1.Rows[i][j].ToString();
}
//查找的dt2中KeyColName的数据,与dt1相同的行(即楼主两个表中ID相同的行)
for(k=0; k<dt2.Rows.Count; k++){
if( dt1.Rows[i][colKey1].ToString() == dt1.Rows[k][colKey2].ToString() )}
m=k;
}
}
//表dt2的第m行数据拷贝到dtReturn中去,且不要KeyColName(ID)列
if( m!=-1 ){
for(k=0; k<dt2.Columns.Count; k++){
if( k==colKey2 ){
continue;
}
dtReturn.Rows[i][j] = dt2.Rows[m][k].ToString();
j++;
}
}
} return dtReturn ;
}有别人的就不用去写了吧。自己写累,虽然这个答案不够精简,不过感觉还不错的资源来源:http://zhidao.baidu.com/question/48304907.html?fr=ala0
从两个表取出两个值 然后再插入第三个表
created procedure “你自己存储过程的名字”
/*
好像冒得输入值
/*
declare @i ,@j(什么类型你自己写)
select @i=姓名 from datatable1
select @j=年龄 from datatable2
insert datatable3 (姓名,年龄,) value(@i,@j)
将指定的 DataTable 与当前的 DataTable 合并。
http://msdn.microsoft.com/zh-cn/library/system.data.datatable.merge(VS.80).aspx
DataTable dt1=new DataTable();
dt1.Columns.Add("ID",typeof(int));
dt1.Columns.Add("Name",typeof(string));
dt1.PrimaryKey=new DataColumn[] { dt1.Columns[0] };
DataTable dt2=new DataTable();
dt2.Columns.Add("ID",typeof(int));
dt2.Columns.Add("MC",typeof(string));DataTable dt3= dt1.Copy();
dt3.Merge(dt2);
DataTable curDt = dt2.Copy(); //curDt存放合并后的值
if(!curDt.Columns.Cotains("B")) curDt.Columns.Add("B"); for(int r = 0; r < dt2.Rows.Count; r++)
{
DataRow dr = dt2.Rows[r];
string aValue = dr["A"].ToString().ToUpper();
foreach(DataRow tDr in dt1.Rows)
{
string tValue = tDr["A"].ToString().ToUpper();
if(tValue == aValue)
{
curDt.Rows[r]["B"] = tDr["B"];
break;
}
}
}