Как создать триггер для вставки для проверки логического удаления в MS SQL Server - PullRequest
0 голосов
/ 27 мая 2018

Я использую SQL Server 2017, и у меня есть таблица Participants, которая имеет 2 столбца, user_id и active.user_id - это первичный ключ, а active - логическое значение для логического удаления.

Я написал триггер, который при удалении строки просто устанавливает active=0 и запись остается.

ALTER TRIGGER [dbo].[PDel]
ON [dbo].[Participants]
INSTEAD OF DELETE
AS
BEGIN
    UPDATE Participants
    SET active = 0
    WHERE user_id IN (SELECT user_id FROM deleted)
END

Теперь я хочу написать триггер, который, когда я хочу вставить в таблицу Participants, должен сначала проверить, доступна ли эта запись.Если он доступен, просто установите active = 1, а если нет, вставьте эту запись в таблицу.

Что я должен сделать, чтобы написать такой код?

1 Ответ

0 голосов
/ 27 мая 2018
CREATE TRIGGER [dbo].[tr_InsertUsers]
ON [dbo].[Participants]
INSTEAD OF INSERT
AS
BEGIN
   SET NOCOUNT ON;

-- Update the existing one
    Update Participants
        Set active = 1
    where [user_id] in (select [user_id] from inserted);    


-- Insert the new ones
    INSERT INTO Participants ([user_id] , active)
    SELECT i.[user_id] , 1
    FROM inserted i 
    WHERE NOT EXISTS (  SELECT 1 
                        FROM Participants p
                        WHERE i.[user_id] = p.[user_id]);
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...