Copy Trigger停止插入行



我试图创建一个触发器,从一个表中复制新插入的数据,并将其插入到链接服务器中的另一个表中。然而,当触发器被创建时,它会停止数据出现在原始表中,直到触发器被删除,甚至也不会将其复制到链接服务器中的另一个表中。

这是我的触发器

GO /****** Object:  Trigger [dbo].[CopyTMSINFO]    Script Date: 12/07/2022 12:53:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[CopyTMSINFO]
ON [dbo].[d_iface_att]
After INSERT
AS DECLARE @EmpID nvarchar(MAX),
@datetime datetime
SELECT @EmpID = ins.emp_id FROM INSERTED ins;
SELECT @datetime = ins.date_and_time FROM INSERTED ins;
INSERT INTO [MAL-HQ-SQL01].[MallaghanApp].[dbo].[EmployeeClockIn] (Id,Employee,TASDateTimeStart,TMSDateTime,JobType)
VALUES ( NEWID(),@EmpID,0,@datetime, 'TMS')

任何帮助都将是非常感激的,因为我不太了解这些东西,我真的很困惑。

你的触发器有两个问题:

  • 您需要使用SET NOCOUNT ON来防止' '行' ';在某些客户端驱动程序中弄乱预期的结果集。
  • 需要考虑多个inserted表中的行(或零)。
CREATE OR ALTER TRIGGER [dbo].[CopyTMSINFO]
ON [dbo].[d_iface_att]
AFTER INSERT
AS
SET NOCOUNT ON;
IF NOT EXISTS (SELECT 1 FROM inserted)
RETURN;
INSERT INTO [MAL-HQ-SQL01].MallaghanApp.dbo.EmployeeClockIn
(Id, Employee, TASDateTimeStart, TMSDateTime, JobType)
SELECT
NEWID(),
ins.emp_id,
0,
ins.date_and_time,
'TMS'
FROM inserted ins;

然而,使用触发器插入链接服务器是非常糟糕的形式。如果远程服务器离线会发生什么?您应该使用其他复制方法,例如远程服务器使用Agent Job从服务器提取数据。

最新更新