Используйте триггер SQL Server для вставки в таблицу резервных копий и привязки оригинала к резервной копии. - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь реализовать следующую логику в SQL Server:

каждый раз, когда данные вставляются в MainTable, все эти данные также должны быть вставлены в таблицу резервного копирования MainTable_BACKUP и в каждую строкувставленный в MainTable должен иметь внешний ключ BackupRecordId, указывающий на MainTable_BACKUP.

Может ли это быть достигнуто с помощью триггера?

CREATE TRIGGER TRG_MainTable
ON MainTable
AFTER INSERT AS
BEGIN
    INSERT INTO MainTable_BACKUP 
        SELECT * 
        FROM INSERTED

    -- UPDATE INSERTED SET BackupRecordId = ??? somehow...
END

1 Ответ

3 голосов
/ 29 мая 2019

Да, вы можете.

Предполагая, что в вашей таблице MainTable_BACKUP у вас есть столбец идентификаторов с именем BackupRecordId, вы можете создать триггер после вставки, как этот

 Create Table MainTable
 (
    ID int IDENTITY(1, 1) PRIMARY KEY,
    Description NVARCHAR(50),
    BackupRecordId int
 )

 Create table MainTable_BACKUP
 (
    BackupRecordId int IDENTITY(1, 1) PRIMARY KEY,
    [Id] int,
    Description NVARCHAR(50)
 )

 CREATE TRIGGER TRG_MainTable
    ON MainTable
    AFTER INSERT AS
    BEGIN
        INSERT INTO MainTable_BACKUP([Id], Description) 
        SELECT [Id], Description FROM INSERTED

        UPDATE MainTable
        SET BackupRecordId = MP.BackupRecordId
        FROM MainTable
        INNER JOIN inserted i on i.Id = MainTable.Id
        INNER JOIN MainTable_BACKUP MP ON MP.Id = MainTable.Id
    END

Вы можете попробовать это с помощью:

insert into MainTable(Description) 
values ('Testing')

select * from MainTable
select * from MainTable_BACKUP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...