Раньше у меня была TRIGGER
в Table46
, чтобы сработать после вставки, чтобы отправить сообщение на другой сервер с помощью Service Broker, который работал нормально:
CREATE TRIGGER trgSendItemData
ON [dbo].[Table46]
AFTER INSERT
AS
DECLARE @new_event XML;
SET @new_event = (
SELECT i.[046_ID] AS [id]
, NP.NoPart + ' ' + CONVERT(VARCHAR(3), T41.[041_No]) AS [name]
, DATEADD(MINUTE, -1 * i.[046_ExeTime], i.[046_DateTime]) AS [eventstart]
, i.[046_DateTime] AS [eventend]
, i.[046_IDRes] AS [resource_id]
, i.[046_ExeTime] AS [execution]
, ISNULL(MIN(T48.[048_MachTime]), 0) AS [same]
, ISNULL(MIN(T48_1.[048_MachTime]), 0) AS [all]
, i.[046_Pallet] AS [pallet]
FROM inserted AS i
INNER JOIN Table41 AS T41
ON i.[046_IDOp] = T41.[041_IDOp]
INNER JOIN NoParts AS NP
ON T41.[041_IDNoPart] = NP.Autonumber
INNER JOIN Table48 AS T48
ON i.[046_IDRes] = T48.[048_IDRes]
AND i.[046_IDOp] = T48.[048_IDOp]
INNER JOIN Table48 AS T48_1
ON i.[046_IDOp] = T48_1.[048_IDOp]
GROUP BY i.[046_ID], NP.NoPart, T41.[041_No], i.[046_MachTime],
i.[046_DateTime], i.[046_IDRes], i.[046_ExeTime], i.[046_Pallet];
FOR XML AUTO, ELEMENTS
);
DECLARE @ConvHandle UNIQUEIDENTIFIER;
BEGIN TRANSACTION
BEGIN DIALOG @ConvHandle
FROM SERVICE SenderService
TO SERVICE 'ReceiverService'
ON CONTRACT STContract
WITH ENCRYPTION = OFF;
SEND ON CONVERSATION @ConvHandle
MESSAGE TYPE SenderMsg (@new_event);
COMMIT TRANSACTION;
GO
Теперь мне нужны те же данные в таблице другой базы данных, но на том же сервере, поэтому я написал эту, которая не работает:
USE Database1
GO
CREATE TRIGGER trgSendEvent
ON [dbo].[Table46]
AFTER INSERT
AS BEGIN
SET NOCOUNT ON;
INSERT INTO [Database2].[dbo].[Events]
([id]
,[name]
,[eventstart]
,[eventend]
,[resource_id]
,[execution]
,[same]
,[all]
,[pallet])
SELECT i.[046_ID] AS [id]
, NP.NoPart + ' ' + CONVERT(VARCHAR(3), T41.[041_No]) AS [name]
, DATEADD(MINUTE, -1 * i.[046_ExeTime], i.[046_DateTime]) AS [eventstart]
, i.[046_DateTime] AS [eventend]
, i.[046_IDRes] AS [resource_id]
, i.[046_ExeTime] AS [execution]
, ISNULL(MIN(T48.[048_MachTime]), 0) AS [same]
, ISNULL(MIN(T48_1.[048_MachTime]), 0) AS [all]
, i.[046_Pallet] AS [pallet]
FROM inserted AS i
INNER JOIN Table41 AS T41
ON i.[046_IDOp] = T41.[041_IDOp]
INNER JOIN NoParts AS NP
ON T41.[041_IDNoPart] = NP.Autonumber
INNER JOIN Table48 AS T48
ON i.[046_IDRes] = T48.[048_IDRes]
AND i.[046_IDOp] = T48.[048_IDOp]
INNER JOIN Table48 AS T48_1
ON i.[046_IDOp] = T48_1.[048_IDOp]
GROUP BY i.[046_ID], NP.NoPart, T41.[041_No], i.[046_MachTime],
i.[046_DateTime], i.[046_IDRes], i.[046_ExeTime], i.[046_Pallet];
END;
GO
Я знаю, что это не работает, потому что, если я вручную запускаю запрос для вставки нового строка в Table46
, новая строка добавляется в Table46
, но не в Database2.Events
. Вот что я получаю в качестве вывода:
(1 row affected)
Должен ли я получить это дважды вместо этого?
Кроме того, Table46
постоянно получает данные, но когда триггер создается, он прекращает получать его.
Я также попытался запустить запрос для включения триггера, если он отключен, но ничего не меняется.