У меня есть действие из моего класса SQL Server, и мне не хватает только этого триггера для его завершения.
В этом упражнении мой учитель попросил выполнить следующую операцию триггера для последовательного столбца на телефонной таблице. .
После оператора вставки всегда сохраняйте значения в последовательности, например, первая запись равна 0, следующая должна быть 1, и все идет.
И для оператора удаления, если кто-то удаляетзапись последовательного значения должна быть переупорядочена.
У меня нормально работает оператор вставки, создающий последовательность и добавляющий ее следующее значение в столбец.
Но не повезло с оператором delete.
Вот что у меня есть для триггера:
CREATE TRIGGER tg_sequencial
ON Telefone
AFTER INSERT, UPDATE
AS
BEGIN
DECLARE @vSequencial_Ins INT, @vSequencial_Del INT
SELECT @vSequencial_Ins = inserted.Sequencial FROM inserted
SELECT @vSequencial_Del = deleted.Sequencial FROM deleted
-- Check if it is an insert operation
if(@vSequencial_Ins IS NOT NULL AND @vSequencial_Del IS NULL)
begin
update Telefone set Sequencial = NEXT VALUE FOR dbo.Sequencial
from Telefone tel
join inserted i on i.IdPessoa = tel.IdPessoa
end
-- Check if it is an delete operation
else if(@vSequencial_Ins IS NULL AND @vSequencial_Del IS NOT NULL)
begin
alter sequence dbo.Sequencial
restart with 0
end
end
И вот код последовательности:
CREATE SEQUENCE dbo.Sequencial
START WITH 0
INCREMENT BY 1
NO CACHE
;
GO
В моей таблице телефонии есть следующие значения:
Sequencial smallint not null [PK]
IdPessoa int not null[PFK],
IdTipoTelefone tinyint not null [FK],
NumeroTelefone int not null,
DDD tinyint not null
РЕДАКТИРОВАТЬ: Получил триггер вставки работает нормально после изменения кода с:
update Telefone set Sequencial = NEXT VALUE FOR dbo.Sequencial
На:
update Telefone set Sequencial = NEXT VALUE FOR dbo.Sequencial
from Telefone tel
join inserted i on i.IdPessoa = tel.IdPessoa
Теперь влияет только навыбранная строка ввместо увеличения всех полей.