Я думаю, что вы перепутали GO
(разделитель пакетов) и транзакции.Он не должен жаловаться на то, что имена переменных повторно объявлены, при условии, что разделители пакетов все еще присутствуют:
BEGIN TRANSACTION
GO
ALTER TRIGGER [dbo].[trg_UserGarbleValue] ON [dbo].[users]
FOR INSERT
AS
---Etc
Go
ALTER TRIGGER [dbo].[trg_SegmentGarbleValue] ON [dbo].[segment]
FOR INSERT
AS
---Etc
Go
COMMIT
Что касается вашего примечания о TOP 1
, оно хуже, чем вы думаете - триггер запускаетсяодин раз на оператор , а не один раз на строку - он может выполняться в ответ на вставку нескольких строк.И, к счастью, существует псевдотаблица (называемая inserted
), которая содержит именно те строки, которые вызвали срабатывание триггера - вам не нужно искать эти строки в базовой таблице.