已知客户积分账目表结构如下:
SN(主键 INT) MemberSN(会员关键字INT) Debit(借方decimal(19,6)) Credit(贷方decimal(19,6)) Rubric(红字标记int) Balance(余额decimal(19,6))
1 101 1000 0 0 1000
2 102 200 0 0 200
3 102 100 0 0 300
4 101 0 50 1 1050
5 102 0 200 1 500
6 101 70 0 1 980
7 101 0 80 0 900
8 101 200 0 1 700
9 101 0 100 1 800
已知会员MemberSN=101,SN=4的此条记录由于其它原因产生的一笔错误记录需要删除此条记录。请你写出重新更新账目余额的脚本。

解决方案 »

  1.   

    Create Trigger trname On 客户积分账目表
      after delete
    as
    begin
         update 客户积分账目表 set Balance=Balance+(select Balance from deleted)--借贷方向搞不清楚,你自己搞
          where MemberSN=(select MemberSN from deleted)
           and SN<(select SN from deleted)
    end
      

  2.   

    CREATE TABLE #temp
    (
    SN INT IDENTITY NOT NULL PRIMARY KEY,
    MemberSN INT,
    Debit DECIMAL(19, 6),
    Credit DECIMAL(19, 6),
    Rubric INT,
    Balance DECIMAL(19, 6)
    )
    INSERT #temp
    select '101', '1000', '0', '0', '1000' union all
    select '102', '200', '0', '0', '200' union all
    select '102', '100', '0', '0', '300' union all
    select '101', '0', '50', '1', '1050' union all
    select '102', '0', '200', '1', '500' union all
    select '101', '70', '0', '1', '980' union all
    select '101', '0', '80', '0', '900' union all
    select '101', '200', '0', '1', '700' union all
    select '101', '0', '100', '1', '800'
    GO
    --SQL: 删除MemberSN=101, SN=4后,SN > 4的MemberSN记录都应该更新
    --DELETE FROM #temp WHERE MemberSN=101 AND SN=4
    UPDATE T
    SET Balance = (SELECT SUM(Debit)-SUM(Credit) FROM #temp WHERE MemberSN = T.MemberSN AND SN <= T.SN)
    FROM #temp T
    WHERE MemberSN = 101
    AND SN > 4
    go
    --RESULT
    SELECT * FROM #temp WHERE MemberSN=101 ORDER BY SN
    /*
    1 101 1000.000000 0.000000 0 1000.000000
    6 101 70.000000 0.000000 1 1070.000000
    7 101 0.000000 80.000000 0 990.000000
    8 101 200.000000 0.000000 1 1190.000000
    9 101 0.000000 100.000000 1 1090.000000
    */
      

  3.   

    Create Trigger trname On 客户积分账目表
      after delete
    as
    begin
         update 客户积分账目表 set Balance=Balance+(select Balance from deleted)--借贷方向搞不清楚,你自己搞
          where MemberSN=(select MemberSN from deleted)
           and SN<(select SN from deleted)
    end
      

  4.   


    CREATE TABLE temp
    (
        SN INT IDENTITY NOT NULL PRIMARY KEY,
        MemberSN INT,
        Debit DECIMAL(19, 6),
        Credit DECIMAL(19, 6),
        Rubric INT,
        Balance DECIMAL(19, 6)
    )
    INSERT temp
    select '101', '1000', '0', '0', '1000' union all
    select '102', '200', '0', '0', '200' union all
    select '102', '100', '0', '0', '300' union all
    select '101', '0', '50', '1', '1050' union all
    select '102', '0', '200', '1', '500' union all
    select '101', '70', '0', '1', '980' union all
    select '101', '0', '80', '0', '900' union all
    select '101', '200', '0', '1', '700' union all
    select '101', '0', '100', '1', '800'
    GOselect * from  temp
    create trigger tr_delfortemp on temp
    after  delete
    as
     update temp set Balance = Balance +(select Debit from deleted)-(select Credit from deleted) 
    where SN > (select SN from deleted ) and MemberSN =(select MemberSN from deleted)
    godelete temp where sn=4/*1 101 1000.000000 0.000000 0 1000.000000
    2 102 200.000000 0.000000 0 200.000000
    3 102 100.000000 0.000000 0 300.000000
    5 102 0.000000 200.000000 1 500.000000
    6 101 70.000000 0.000000 1 930.000000
    7 101 0.000000 80.000000 0 850.000000
    8 101 200.000000 0.000000 1 650.000000
    9 101 0.000000 100.000000 1 750.000000
    */