Ich habe viele Felder in einer Tabelle und ich versuche, jedes Einfügen - Update - Löschen in einer anderen Tabelle zu überprüfen.Wie bekomme ich alten Wert und neuen Wert mit SQL-Trigger?
Ich habe gerade ein Problem, den Wert des genauen Feldes, das ich gewählt habe, zu erhalten.
Ich habe diesen Code geschrieben und erwarte den alten und neuen Wert eines exakten Feldes.
DECLARE @ColName NVARCHAR(225) ,
@FieldID INT;
DECLARE columnCursor CURSOR
FOR
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'acc_Account'
AND TABLE_SCHEMA = 'dbo';
DECLARE @deleted_colmn INT;
DECLARE CurDB CURSOR
FOR
SELECT @deleted_colmn
FROM #Deleted;
OPEN columnCursor;
FETCH NEXT FROM columnCursor INTO @ColName;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
--OPEN CurDB;
--FETCH NEXT FROM CurDB INTO @deleted_colmn;
SET @FieldID = (SELECT TOP 1
FieldID
FROM fld_Field
WHERE fld_Field.FieldName = @ColName
);
SET @newvalue = (SELECT TOP 1
@ColName
FROM Inserted
WHERE @ColName = @ColName
);
SET @oldvalue = (SELECT TOP 1
@ColName
FROM Deleted
IF @newvalue <> @oldvalue
BEGIN
INSERT INTO dbo.utl_Audit_Trail_Field
(AuditTrailID ,
FieldID ,
OldValue ,
NewValue ,
CreatedDate ,
CreatedUserID ,
UpdatedDate ,
UpdatedUserID
)
VALUES (@AuditTrailID , -- AuditTrailID - bigint
@FieldID , -- FieldID - bigint
@oldvalue , -- OldValue - nvarchar(1000)
@newvalue , -- NewValue - nvarchar(1000)
@CreatedDate , -- CreatedDate - datetime
@CreatedUserID , -- CreatedUserID - bigint
@CreatedDate , -- UpdatedDate - datetime
@CreatedUserID -- UpdatedUserID - bigint
);
END;
FETCH NEXT FROM columnCursor INTO @ColName;
END; WHERE @ColName = @ColName
);
[lesen erste Dokumentation über gelöscht und eingefügt] (https://docs.microsoft.com/en-us/sql/relational-databases/triggers/use-the-inserted-and-deleted-tables) Hoffe das hilft! –
@BogdanSahlean sie hören nicht auf, mich in allen Tutorials zu erwähnen, ich bin ein ziemlich gutes Beispiel. ;-) –
Niemals jemals (und ich meine EVER) benutze einen Cursor in einem Trigger. Je. Dies ist eine gute Möglichkeit, ein ansonsten vollkommen gesundes RDBMS schreiend in die Knie zu zwingen und um Gnade zu flehen. –