Я пишу триггер вставки, который работает так: когда строка вставляется в таблицу, она обновляет определенное поле уникальным числом из 20 символов, которое генерируется с использованием времени и случайного числа. Это работает нормально, когда я вставляю одну строку. Но проблема возникает, когда я вставляю несколько строк, используя один оператор вставки.
Мой запрос и ошибка триггера и вставки:
Trigger:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER TRIGGER [unique_outmsg_id]
ON [dbo].[tbl_subscription]
FOR INSERT
AS
BEGIN
DECLARE @random_number varchar(6);
DECLARE @time_value varchar(23);
DECLARE @unique_id varchar(20);
SELECT @random_number = convert(varchar,(SELECT CAST(RAND() * 999 AS INT)));
SELECT @time_value = convert(varchar,(select replace(replace(replace(replace(convert(varchar(23), getdate(), 121),'-',''),'.',''),' ',''),':','')));
SELECT @unique_id=(SELECT(@time_value+@random_number));
UPDATE dbo.tbl_subscription SET outmsg_id=@unique_id WHERE outbox_id=(SELECT outbox_id FROM inserted)
END
Выход триггера: 20110724093323697833
Многострочный запрос вставки:
USE [test_abc]
INSERT INTO [test_abc].[dbo].[tbl_subscription] (inbox_id,inmsg_id,enabled)
SELECT s.inbox_id,s.enabled
FROM [test_def].[dbo].[tbl_subscriberlist] s,[test_def].[dbo].infoservice i
WHERE s.mo_key = 'ABC' AND i.subscribtionKey='ABC'
Функциональность этого запроса:
Чтобы собрать информацию из другой таблицы и вставить в tbl_subscription
несколько строк.
Но ошибка возникает при выполнении этого запроса:
Сообщение 512, уровень 16, состояние 1, процедура unique_outmsg_id, строка 13
Подзапрос вернул более 1 значения. Это не разрешено, когда
подзапрос следует =,! =, <, <=,>,> = или когда подзапрос используется как
выражение. Заявление было прекращено.
Итак, почему эта ошибка возникает, когда я вставляю несколько строк в таблицу? Есть идеи? Пожалуйста, помогите.