【问题标题】:How to update two tables at a time using a single stored procedure?如何使用单个存储过程一次更新两个表?
【发布时间】:2012-03-01 06:55:11
【问题描述】:

我的数据库中有两个表 RequestsBalance 跟踪器没有关系....但是我想从两个表中选择数据并将其绑定到两个网格...

请求

EmpID | EmpRqsts | EmpDescription | ApproverID | ApprovedAmount | RequestPriority
   1  | asdfsb   | sadbfsbdf      |     1      |
   2  | asbfd    | sjkfbsd        |     1      |

余额追踪器

EmpId | BalanceAmnt | LastUpdated | lastApprovedAmount
  1   |    5000     | sdfbk       |
  2   |    3000     | sjbfsh      |

现在我想根据EmpID 一次更新两个表。无论何时批准金额,都应在request 表列[ApprovedAmount] 中更新并优先...

[ApprovedAmount] 更新时,[BalanceAmnt] 的余额跟踪器也应该通过添加批准的金额来更新,[LastUpdated],[lastApprovedAmount] 应该更新日期和时间

谁能帮我查询一下....

【问题讨论】:

    标签: sql-server-2008 c#-4.0


    【解决方案1】:

    首先创建一个存储过程来更新您的[ApprovedAmount]

    create procedure SP_UpdateRequestedAmount
        (@EmpID int,
         @AmountApproved varchar (50),
         @RequestPriority varchar (50))
    as
    begin
        Update Requests   
        set ApprovedAmount = @AmountApproved,
            Request_Priority = @RequestPriority 
        where
            Emp_ID = @EmpID
    end
    

    然后在 [AmountApproved] 列更新时使用触发器更新另一个表

    CREATE TRIGGER tr_ApprovedAmount_UPDATE 
    ON Requests   
    AFTER UPDATE 
    AS 
        --Make sure Priority was changed 
        IF NOT UPDATE(ApprovedAmount) 
            RETURN 
    
        --Determine if Priority was changed to high 
    
        -- PUT your queries for Updatating other table 
         declare @Balance_LastUpdated date
         declare @ApprovedDate date
    
         UPDATE Balance Tracker
         SET Balance Tracker.Balance_BalanceAmount =  Balance Tracker.Balance_BalanceAmount +   PTS_Requests.Request_IsApproved,
             Balance_LastUpdated = @Balance_LastUpdated,
             Balance_LastApproval = @ApprovedDate
         FROM
             Balance Tracker 
         INNER JOIN
             Requests ON Balance Tracker.Emp_ID = Requests.Emp_ID
    

    希望这会有所帮助............

    【讨论】:

      【解决方案2】:

      请在没有触发器的情况下也试试这个

          CREATE procedure SP_UpdateRequestedAmount
         (
         @EmpID int,
         @AmountApproved varchar (50),
         @RequestPriority varchar (50)
         )
         as
         begin
      
         --Declare a variable for know current ApprovedAmount (that is before updation)
         Declare @CurrentApprovedAmount AS INT
      
         --set current ApprovedAmount
         SET @AmountApproved =(SELECT ApprovedAmount FROM Requests WHERE EmpID=@EmpID)
      
         --check is @CurrentApprovedAmount differ from @AmountApproved
         IF (@CurrentApprovedAmount!=@AmountApproved)
              BEGIN
                      --Here we need to update  Requests and BalanceTracker
              END
          ELSE
              BEGIN
                  --only update Requests -- no change in AmountApproved
              END 
      
         go
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-30
        • 1970-01-01
        • 2019-02-06
        • 2018-10-03
        相关资源
        最近更新 更多