C# 在SQLServerC中使用相同的查询选择和更新

C# 在SQLServerC中使用相同的查询选择和更新,c#,sql-server,C#,Sql Server,我有一个表“tblHistory”,如图所示,有以下列 另一个表TBLDUE,如图所示,有以下列 我试图做的是从tblHistory中获取checked=0的amountdue之和,然后将该和更新为tblDue上的amountdue列 所有添加到tblHistory的新行最初都将选中=0,在检索总和并更新tblDue后,需要在tblHistory上选中=1,以便不再添加选中的行 请帮助我如何做到这一点 到现在为止我都试过了 using (SqlConnection sqlConnecti

我有一个表“tblHistory”,如图所示,有以下列

另一个表TBLDUE,如图所示,有以下列

我试图做的是从tblHistory中获取checked=0的amountdue之和,然后将该和更新为tblDue上的amountdue列

所有添加到tblHistory的新行最初都将选中=0,在检索总和并更新tblDue后,需要在tblHistory上选中=1,以便不再添加选中的行

请帮助我如何做到这一点

到现在为止我都试过了

    using (SqlConnection sqlConnection = new SqlConnection(connstring))
            {
                string regdno = txtRegdno.Text;
                SqlCommand sqlCmd = new SqlCommand("select  Sum(isnull(cast(amountdue as float),0)) as amountdue from tblHistory where regdno = '" + txtRegdno.Text + "' and checked='0' , sqlConnection);
                sqlConnection.Open();
                SqlDataReader sqlReader = sqlCmd.ExecuteReader();

                while (sqlReader.Read())
                {

                    textBox1.Text = (sqlReader["amountdue"].ToString());



                    }


                }

                sqlReader.Close();
            }

这将返回所有“到期金额”的总和。我只想求“checked=0”的和,然后在计算完和之后,它的值必须是“checked=1”,对于新行,它必须为“checked=0”求和。

如果你想在数据库中这样做,你可以这样做:

INSERT INTO tblDue
SELECT regdno, SUM(amountdue)
FROM tblHistory
WHERE checked = 0
AND regdno NOT IN (SELECT regdno FROM tblDue)
GROUP BY regdno

UPDATE d
SET amountdue = SUM(h.amountdue)
FROM tblDue d
INNER JOIN tblHistory h ON d.regdno = h.regdno
WHERE d.regdno IN (SELECT regdno FROM tblHistory WHERE checked = 0)
GROUP BY d.regdno

UPDATE tblHistory
SET checked = 1
WHERE regdno IN (SELECT regdno FROM tblDue)
我没有创建表,所以我没有对此进行测试,可能会有问题,但您已经了解了所需的方法


我假设那些id字段是identity,所以我忽略了它们。如果在逻辑上必须考虑它们,我可以更新查询。

简单的答案是,不能在同一条语句中执行select和update操作,因为它们是两个不同的操作。

添加到TBL历史记录的新行是否与前一次加载的regdno相同?我的意思是,总金额是否需要更新?您尝试过什么?您是在C中执行此操作还是在SQL中执行此操作?@Andrew yes他们有相同的regdno,yes aggregate sum必须更新为tblDue,并且这些聚合行必须检查=1是否将id列设置为identity?我是在C@Hammerstein中执行此操作的。我已使用C代码更新了问题,目前为止我一直在尝试。在代码更新后,我得到了选中=1。我遇到的问题是下一次,它只添加checked=0值,并丢弃先前获得的和。我希望在上一个sum中添加新的sum。我的脚本是否存在此问题?我已经考虑过了。插入是针对全新的regdno,更新是针对现有的regdno,因此它对所有内容求和,而不考虑选中状态。@Sdp,我在等待您的答复。这个问题怎么了?