Мне нужно что-то вроде «контроля версий» для некоторых критических таблиц, и я попытался реализовать это довольно простым способом:
CREATE TABLE [dbo].[Address] (
[id] bigint IDENTITY(1, 1) NOT NULL,
[post_code] bigint NULL,
...
)
CREATE TABLE [dbo].[Address_History] (
[id] bigint NOT NULL,
[id_revision] bigint NOT NULL,
[post_code] bigint NULL,
...
CONSTRAINT [PK_Address_History] PRIMARY KEY CLUSTERED ([id], [id_revision]),
CONSTRAINT [FK_Address_History_Address]...
CONSTRAINT [FK_Address_History_Revision]...
)
CREATE TABLE [dbo].[Revision] (
[id] bigint IDENTITY(1, 1) NOT NULL,
[id_revision_operation] bigint NULL,
[id_document_info] bigint NULL,
[description] varchar(255) COLLATE Cyrillic_General_CI_AS NULL,
[date_revision] datetime NULL,
...
)
и куча триггеров на вставку / обновление / удаление для каждой таблицы, которая предназначена для хранения ее изменений.
Мое приложение основано на PyQt + sqlalchemy, и когда я пытаюсь вставить сущность, которая хранится в версионной таблице, sqlalchemy выдает ошибку:
The target table 'Heritage' of the DML statement cannot have
any enabled triggers if the statement contains
an OUTPUT clause without INTO clause.
(334) (SQLExecDirectW); [42000]
[Microsoft][ODBC SQL Server Driver]
[SQL Server]Statement(s) could not be prepared. (8180)")
Что мне делать? Я должен использовать sqlalchemy.
Если кто-то может дать мне совет, как я могу реализовать управление версиями без триггеров, это было бы круто.