C# 如何将项目的发票总额更新为两列之一,即IS或Business
我有两张桌子: 一个是发票表,它有一个名为C# 如何将项目的发票总额更新为两列之一,即IS或Business,c#,.net,sql,C#,.net,Sql,我有两张桌子: 一个是发票表,它有一个名为BusinessOrIS的查找表,以确定它是“is”还是“Business”;以及一个表示发票金额的已用列 另一个表是projects表,它有两列需要更新“TotalIsPent”和“TotalBusinessPend” 所以我想做的是取BusinessOrIS=1(is)和invoice.projectd=Projects.projectd的花费金额之和。以及BusinessOrIS=2(Business)和invoice.projectd=Proje
BusinessOrIS
的查找表,以确定它是“is”还是“Business”;以及一个表示发票金额的已用列
另一个表是projects表,它有两列需要更新“TotalIsPent”和“TotalBusinessPend”
所以我想做的是取BusinessOrIS=1(is)和invoice.projectd=Projects.projectd的花费金额之和。以及BusinessOrIS=2(Business)和invoice.projectd=Projects.projectd。并将其汇总到“TotalIsPent”和“TotalBusinessPend”
//我现在看到的是InsertButton点击事件的c侧:
//进入公司
SqlConnection db = new SqlConnection("mystring")SqlTransaction transaction;
db.Open()
transaction = db.BeginTransaction();
UPDATE Projects Set ProjectSpentIS = (SELECT SUM(Invoices.Spent)
FROM Invoices WHERE Invoices.CostToISorBusiness ='1'
AND Projects.Projectid = Invoices.ProjectID)
UPDATE Projects Set ProjectSpentBusiness =
(SELECT SUM(Invoices.Spent) FROM Invoices
WHERE Invoices.CostToISorBusiness ='2' AND
Projects.Projectid = Invoices.ProjectID)
transaction.Commit();
我想我可能对您的模式设计有问题(因为您似乎有一个多域表,这是一个禁忌,或者至少应该为将来的扩展设置数据库)。但是,您没有发布足够的信息来重新推荐更改 但是,您应该能够将
UPDATE
重新表述为一条SQL语句:
UPDATE Projects as a
SET ProjectSpentIS = COALESCE((SELECT SUM(b.Spent)
FROM Invoices as b
WHERE b.CostToISOrBusiness = '1'
AND b.ProjectId = a.ProjectId), ProjectSpentIS),
ProjectSpentBusiness = COALESCE((SELECT SUM(b.Spent)
FROM Invoices as b
WHERE b.CostToISOrBusiness = '2'
AND b.ProjectId = a.ProjectId),
ProjectSpentBusiness)
WHERE EXISTS (SELECT '1'
FROM Invoices as b
WHERE b.ProjectId = a.ProjectId
AND b.CostToISOrBusiness in ('1', '2'))
作为一点建议,您可能希望将事务代码包装在try{}catch{}中。如果出现错误,请在catch部分执行回滚,您在哪里分配SqlCommand来执行查询。。?还将事务对象分配给sql comman对象,例如sqlcmd.transaction=transaction;确保将sqlcmd创建为sqlcmd=newsqlcommand();您是否收到错误数据?如果没有更新,你能发布你的表模式和数据片段吗?很抱歉,我正在开会,我会在明天早上再次尝试发布你要求的内容。抱歉,耽搁了!谢谢!对不起,不,不!