select @nvchOldStatus = OrderStatus from deleted
select @nvchNewStatus = OrderStatus from inserted
select @nvchDocType = DocumentType from inserted
-- If there has been a change in the status field
if @nvchNewStatus <> @nvchOldStatus and @nvchDocType ='O' and @nvchNewStatus <> '0'
select @nvchOrdNum = SalesOrder from inserted
select @nvchCust = Customer from inserted
select @nvchUser = LastOperator from inserted
SET @nvchText = 'Order Number: ' + @nvchOrdNum + ' For Customer: ' + @nvchCust + ' Released from Suspense by: ' + @nvchUser
begin
if @nvchOldStatus ='S'
begin
-- send your email
USE tempdb;
GO
CREATE TABLE UpdateTest
(
ID INT ,
Payload NVARCHAR(8) ,
UpdateDetectedByColumnsUpdated BIT ,
UpdateDetectedByUpdate BIT ,
UpdateDetectedByComparision BIT,
);
GO
CREATE TRIGGER tr_UpdateTest ON UpdateTest
AFTER UPDATE
AS
SET NOCOUNT ON;
IF ( COLUMNS_UPDATED() & 2 ) = 2
UPDATE T
SET UpdateDetectedByColumnsUpdated = 1
FROM UpdateTest T
INNER JOIN Inserted I ON I.ID = T.ID;
IF UPDATE(Payload)
UPDATE T
SET UpdateDetectedByUpdate = 1
FROM UpdateTest T
INNER JOIN Inserted I ON I.ID = T.ID;
UPDATE T
SET UpdateDetectedByComparision = 1
FROM UpdateTest T
INNER JOIN Inserted I ON I.ID = T.ID
INNER JOIN Deleted D ON I.ID = D.ID
AND I.Payload <> D.Payload;
GO
INSERT INTO UpdateTest
VALUES ( 1, '1', 0, 0, 0 ),
( 2, '2', 0, 0, 0 ),
( 3, '3', 0, 0, 0 ),
( 4, '4', 0, 0, 0 );
-- Single row update, change of the value.
UPDATE UpdateTest
SET Payload = '11'
WHERE ID = 1;
-- Single row update, no change of the value.
UPDATE UpdateTest
SET Payload = '2'
WHERE ID = 2;
-- Display the results.
SELECT *
FROM UpdateTest;
-- Reset the indicators.
UPDATE UpdateTest
SET UpdateDetectedByColumnsUpdated = 0 ,
UpdateDetectedByUpdate = 0 ,
UpdateDetectedByComparision = 0;
-- Multi-row update, changing only row 1 and 3.
UPDATE UpdateTest
SET Payload = '2'
WHERE ID <= 3;
-- Display the results.
SELECT *
FROM UpdateTest;
DROP TABLE UpdateTest;
GO
CREATE TRIGGER tr_UpdateTest ON UpdateTest
AFTER UPDATE
AS
SET NOCOUNT ON;
IF ( COLUMNS_UPDATED() & 2 ) = 2
UPDATE T
SET UpdateDetectedByColumnsUpdated = 1
FROM UpdateTest T
INNER JOIN Inserted I ON I.ID = T.ID;
IF UPDATE(Payload)
UPDATE T
SET UpdateDetectedByUpdate = 1
FROM UpdateTest T
INNER JOIN Inserted I ON I.ID = T.ID;
UPDATE T
SET UpdateDetectedByComparision = 1
FROM UpdateTest T
INNER JOIN Inserted I ON I.ID = T.ID
INNER JOIN Deleted D ON I.ID = D.ID
AND I.Payload <> D.Payload;
DECLARE @oldOrderStatus varchar(5), @newOrderStatus varchar(5), @rows_affected INT;
SELECT @rows_affected = COUNT(*) FROM DELETED;
SELECT @oldOrderStatus = Payload FROM DELETED;
SELECT @newOrderStatus = Payload FROM INSERTED;
DECLARE @Message NVARCHAR(255);
SET @Message = 'Rows touched: ' + CAST(@rows_affected AS NVARCHAR(255)) + ', Old Value: ' + @oldOrderStatus + ', New Value: ' + @newOrderStatus + '.';
PRINT @Message;
GO
1. OrderStatus ="S"
2. User logs in to order, OrderStatus ="0"
3. User releases order, OrderStatus ="1" or "4" or "8"
I can't see how I can track the change from "S" to "1" or "4" or "8"