@ Anil, вот пример кода SQL Server 2008, который поможет вам достичь цели:
DECLARE @Requests TABLE
(
EmpId int
, EmpRqsts nvarchar(50)
, EmpDescription nvarchar(250)
, ApproverID int
, ApprovedAmount money
, RequestPriority int
)
DECLARE @BalanceTracker TABLE
(
EmpId int
, BalanceAmnt money
, LastUpdated datetime
, lastApprovedAmount money
)
-- Insert data for testing
INSERT INTO @Requests VALUES
(
1
, 'Something here'
, 'Some descriptio here'
, 1
, 100
, 1
)
INSERT INTO @Requests VALUES
(
2
, 'Something here 2 '
, 'Some descriptio here 3'
, 1
, 215
, 2
)
INSERT INTO @BalanceTracker VALUES
(
1
, 5000
, GETDATE() - 3
, 310
)
INSERT INTO @BalanceTracker VALUES
(
2
, 3000
, (GETDATE() - 1)
, 98
)
-- Declare local variables
DECLARE
@NewAmount money
, @NewPriority int
, @SelectedEmpId int
-- Assing values for example
SELECT @NewAmount = 1000
, @SelectedEmpId = 1
, @NewPriority = 5
-- Get the tables values pre - updates
SELECT *
FROM @Requests
SELECT *
FROM @BalanceTracker
BEGIN TRY
-- Update the record with new ApprovedAmount and Request Priority
UPDATE @Requests
SET ApprovedAmount = @NewAmount
, RequestPriority = @NewPriority
WHERE EmpId = @SelectedEmpId
-- If no error found then update BalanceAmnt trable
IF (@@ERROR = 0)
BEGIN TRY
UPDATE @BalanceTracker
SET BalanceAmnt = (BalanceAmnt + @NewAmount)
, LastUpdated = GETDATE()
, lastApprovedAmount = @NewAmount
WHERE EmpId = @SelectedEmpId
END TRY
BEGIN CATCH
PRINT N'Error found updating @BalanceTracker table: ' + ISNULL(LTRIM(STR(ERROR_NUMBER())) , N'Unknown Error' )
+ N', Message: ' + ISNULL ( ERROR_MESSAGE() , N'No Message' )
END CATCH
END TRY
BEGIN CATCH
PRINT N'Error found updating @Requests table: ' + ISNULL(LTRIM(STR(ERROR_NUMBER())) , N'Unknown Error' )
+ N', Message: ' + ISNULL ( ERROR_MESSAGE() , N'No Message' )
END CATCH
-- Get the tables values post - updates
SELECT *
FROM @Requests
SELECT *
FROM @BalanceTracker
Примечание 1 : @Table - это таблицы переменных, обрабатываемыеSQL Server 2008. Если вы используете предыдущую версию, вы сможете создать временную таблицу (#Table). Примечание 2 : типы данных могут различаться в зависимости от используемой версии SQL.