Hi there. Please examine the coding in the following trigger. It's purpose is to display an error message if the user selects an invalid option. It is processing on top of an accounting application. The message does appear but I also want to change the values of certain fields so that the requisition lines do not disappear from view after processing has completed in the main application. These two update statements do not happen in spite of having a COMMIT TRAN immediately afterwards and commenting out the ROLLBACK TRAN instruction. I am thinking that the act of throwing up an error message is causing these updates to be cancelled. Do you agree and if so how do I solve this ?
The same thing happens if I use an INSTEAD OF trigger.
Microsoft DevelopmentMicrosoft SQL ServerMicrosoft SQL Server 2008
Last Comment
Scott Pletcher
8/22/2022 - Mon
Shaun Kline
Please provide code.
Philip van Gass
ASKER
USE [HST-ADMN2014]
GO
/****** Object: Trigger [dbo].[tr_Reqn_to_PO_invalid_option] Script Date: 2013/12/13 01:44:10 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tr_Reqn_to_PO_invalid_option]
ON [dbo].[_etblPOPRequisitionLines]
AFTER UPDATE
AS
BEGIN
BEGIN TRY
BEGIN TRAN
DECLARE @LineID int, @Module int, @Description varchar(100), @Supplier int, @Quantity float, @ExpectedPrice float, @ExpectedDate datetime, @Project int, @LineStatus int, @Incident int, @ActualPrice float, @Sector varchar(100)
SELECT @LineID = idPOPRequisitionlines, @Module = iModuleID, @Description = cDescription, @Supplier = iSupplierID, @Quantity = fQuantity, @ExpectedPrice = fExpectedPrice, @ExpectedDate = dExpectedDate,
@Project = iProjectID, @LineStatus = iLineStatus, @Incident = iIncidentID,
@ActualPrice = fActualPrice, @Sector = cSector
FROM inserted
IF UPDATE(iLineStatus)
BEGIN
IF @LineStatus = 4
OR @LineStatus = 13
BEGIN
UPDATE _etblPOPRequisitionLines
SET iLineStatus = 3
WHERE idPOPRequisitionLines = @LineID
UPDATE _rtblIncidents
SET iIncidentStatusID = 1, iClassID = 0
WHERE idIncidents = @Incident
COMMIT TRAN
RAISEERROR ('You have chosen an incorrect status option', 16, 1)
WITH NOWAIT
END
END
COMMIT TRAN
END TRY
BEGIN CATCH
--ROLLBACK TRANSACTION;
THROW
END CATCH
Hi Scott and Jim.
Thanks for this T-SQL code attempting to solve the problem which has given me a greater perspective on SQL 2012 coding.
I have been testing with it but because the trigger is working 'on top of' the Pastel accounting package, Pastel takes control as soon as the trigger is complete and overwrites the changes that it made, so it does not work.
The Pastel front end is written in Visual Basic .Net, but I don't have access to those programs. We are now having a Christmas break so I shall use the opportunity to look into the possibility of adding some Visual Basic .Net code to do the job.