Я нашел интересный вариант, используя DML
с OUTPUT
в SP
и INSERT...EXEC...
после этого:
Тестовые таблицы:
CREATE TABLE TestTable(
ID int NOT NULL PRIMARY KEY,
Title varchar(10) NOT NULL
)
CREATE TABLE TestTableLog(
LogID int NOT NULL IDENTITY,
OperType char(1) NOT NULL,
CHECK(OperType IN('I','U','D')),
ID int NOT NULL,
Title varchar(10) NOT NULL
)
Процедуры DML:
CREATE PROC InsTestTable
@ID int,
@Title varchar(10)
AS
INSERT TestTable(ID,Title)
OUTPUT inserted.ID,inserted.Title,'I' OperType
VALUES(@ID,@Title)
GO
CREATE PROC UpdTestTable
@ID int,
@Title varchar(10)
AS
UPDATE TestTable
SET
Title=@Title
OUTPUT inserted.ID,inserted.Title,'U' OperType
WHERE ID=@ID
GO
CREATE PROC DelTestTable
@ID int
AS
DELETE TestTable
OUTPUT deleted.ID,deleted.Title,'D' OperType
WHERE ID=@ID
GO
Тесты:
-- insert test
INSERT TestTableLog(ID,Title,OperType)
EXEC InsTestTable 1,'A'
INSERT TestTableLog(ID,Title,OperType)
EXEC InsTestTable 2,'B'
INSERT TestTableLog(ID,Title,OperType)
EXEC InsTestTable 3,'C'
-- update test
INSERT TestTableLog(ID,Title,OperType)
EXEC UpdTestTable 2,'BBB'
-- delete test
INSERT TestTableLog(ID,Title,OperType)
EXEC DelTestTable 3
GO
-- show resutls
SELECT *
FROM TestTableLog
Может быть, кому-то будет интересно.