В задаче SQL Agent я загружаю данные из основной таблицы (X). Если статус равен «WW» или «WXY», я просто хочу, чтобы все записи вставлялись в другую таблицу (Y), где я создал триггер. Не могли бы вы дать мне совет, что я должен изменить в определении триггера? Я получаю сообщение об ошибке при попытке вставить несколько записей в таблицу DB2.Y (агент задание не удалось)SQL Вставка нескольких записей в таблицу триггеров
Первого кода (загрузка новых данных)
DECLARE @STARTTIME datetime
DECLARE @TIME datetime
DECLARE @ENDTIME datetime
SET @TIME=(SELECT MAX(Time) FROM DB2.Y)
SET @STARTTIME=(select dateadd(hour,1,getdate()))
SET @ENDTIME=(SELECT MAX(TIME) FROM DB1.X where TIME is not null)
IF @TIME = @ENDTIME
BEGIN
TRUNCATE TABLE DB2.Y;
INSERT INTO DB2.Y (Time) Values (@TIME)
END
ELSE
BEGIN
TRUNCATE TABLE DB2.Y
INSERT INTO DB2.Y ([Serv],[Status])
SELECT [SERV],[STATUS] FROM DB1.X WHERE TIME > @TIME and [SERV]='Description' and ([STATUS]='WW' or [STATUS]='WXY') ;
UPDATE DB2.Y
SET [Time]= @ENDTIME
END
Код триггера:
USE DB2
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[TriggerName] ON Y
AFTER INSERT AS
DECLARE @SERV varchar(40)
DECLARE @STATUS varchar(3)
SET @SERV=(SELECT [SERV] FROM inserted)
SET @STATUS=(SELECT [STATUS] FROM inserted)
IF @STATUS in ('WW', 'WXY')
BEGIN
DECLARE @MSG varchar(500)
SET @MSG = 'Job "' + @SERV + '" failed!!!'
EXEC msdb.dbo.sp_send_dbmail @recipients=N'[email protected]', @body= @MSG, @subject = @MSG, @profile_name = 'profilename'
END
'inserted' может содержать несколько записей и ваш код в настоящее время не занимается этим. – Jaco