如何循环和更新SQL表,汇总任何现有值

时间:2016-05-18 11:08:44

标签: c# sql c#-4.0 ado.net

我的程序中的这个模块部分需要你的帮助。我有2个表, TableA ,其中包含“代码,描述,值” TableB ,其中包含“代码,值”示例如下:

TableA

code    description value
-----------------------------               
CD1     BOOKS      
CD2     BREADS     
CD3     PHONES  
CD4     FISH    

表B

code    value1  value2  value3  value4
--------------------------------------
cd1    12     21     10         21
cd2     9     10     10         11
cd3    19     11     29         13
cd4    10     12     22         12

我们的想法是使用 TableB 的值更新 TableA ,其中 TableA.code = TableB.code 但是如果它们是< strong> TableA 然后通过将新值添加到 TableB.code = TableA.code 的旧值字段来更新 TableA 值字段的内容。我写了下面的代码,但它只更新了一行,下面是我的代码:

DataTable dt = GetDatafromDatabase(); //===== returns a DataTable

string SQLT = "SELECT * FROM tbl_TempReport";

if (cn.State == ConnectionState.Closed)   {cn.Open();   }
SqlCommand cmdT = new SqlCommand(SQLT, cn);
while (rt.Read())
{
// For each row, print the values of each column.
foreach (DataColumn column in dt.Columns)
{
foreach (DataRow row in dt.Rows)
{
colname = column.ColumnName.ToString();
string m_Code = rt["code"].ToString();
if (m_Code == colname) {
if (m_Code == colname && mValue > 0) { mValue +=         Convert.ToInt32(row[column].ToString()); } else { mValue = Convert.ToInt32(row[column].ToString()); }
//============ insert into tbl_TempReport to match the appropriate column 

string SQLP = "UPDATE tbl_TempReport SET VALUEP = @VALUEP WHERE code =     @code";
SqlCommand cmdp = new SqlCommand(SQLP, cn);
cmdp.Parameters.AddWithValue("@VALUEP", SqlDbType.Int).Value = mValue;
cmdp.Parameters.AddWithValue("@code", SqlDbType.NVarChar).Value =     rt["code"].ToString();
cmdp.ExecuteNonQuery();
}
}
}
}

我需要你的帮助来实现这一目标。谢谢

1 个答案:

答案 0 :(得分:0)

如果我理解了这个问题,可以在一个更新语句中完成,没有任何循环:

UPDATE a 
SET value = b.value1 + b.value2 + b.value3 + b.value4 + COALESCE(value, 0)
FROM TableA a
INNER JOIN TableB b ON(a.code = b.code)