在单个查询中更新具有不同值的多个行

OJa*_*zem 0 c# sql sql-server

我在数据库(SQL Server 2005)中有一个总帐表,包含列(ID,Insertion_Date,Invoice_No,Debit,Credit和Balance).

当用户添加一些条目时,他将被给予填写发票号码.和金额(借方)因此余额将自动添加为余额=余额 - 金额.无论如何,在为同一发票设置多行之后,用户决定编辑前一行的金额.编辑金额后,同一行和其他行的余额应自动更改.(如:编辑的行将采用新的金额,如:Balance = Balance - newamount,其他行将采用新余额和sub.及其当前金额).

示例:表格GL

ID   Date       Invoice_No    Debit    Credit    Balance
---------------------------------------------------------
1   19/3/2014    123456        0        400        400
2   19/3/2014    123456       100         0        300
3   20/3/2014    123456        50         0        250
4   21/3/2014    123456       100         0        150
5   22/3/2014    123456        50         0        100
Run Code Online (Sandbox Code Playgroud)

在使用ID 2编辑行并在借记列上进行更改(而不是100使其为50)之后,其他行将受影响,因此结果应如下所示.

ID   Date       Invoice_No    Debit    Credit    Balance
---------------------------------------------------------
1   19/3/2014    123456        0        400        400
2   19/3/2014    123456        50         0        350
3   20/3/2014    123456        50         0        300
4   21/3/2014    123456       100         0        200
5   22/3/2014    123456        50         0        150
Run Code Online (Sandbox Code Playgroud)

任何想法如何通过单个查询来管理它.我是SQL新手,需要帮助.请询问更多信息.如果需要的话.

D S*_*ley 7

我强烈建议您不要将"运行总计"作为事务表中的字段保留 - 在视图,存储过程或消费应用程序中计算它.否则,对一个记录的更改将级联到表中的每个其他记录.

  • 将更新放在一个sproc中并没有让它变得更好 - 你仍然将一个更新级联到多个记录.不要存储运行余额 - 在获取数据时计算它. (5认同)