I've created the following Insert Trigger on a table on Server1, which calls a SPROC on Server2. I have successfully linked the servers and can execute the sproc on Server2 while logged into Server1 via QA.When I insert a record into the table, I get the above error 8501. Do I really need MSDTC to do this, or is my trigger wrong? If so, how do I install MSDTC, and what are the implications of doing so?How can I rewrite the trigger to call the sproc for each row of Inserted data?CREATE TRIGGER [Astea_Insert] ON dbo.TrackData AFTER INSERT AS /* Call Stored Procedure in AsteaSQL Server */DECLARE @Astea_Serial varchar(30)DECLARE @Astea_Error_Code varchar(8)DECLARE @Astea_Text varchar(254)DECLARE @Astea_DT datetimeDECLARE @Astea_ErrorLevel intDECLARE @Result intDECLARE @ErrorVal intSELECT @Astea_Serial = i.SerialNumber FROM Inserted iSELECT @Astea_Error_Code =i.ErrorCode FROM Inserted iSELECT @Astea_Text = i.Text FROM Inserted iSELECT @Astea_DT = i.Time_Stamp FROM Inserted iSELECT @Astea_ErrorLevel = i.ErrorLevel FROM Inserted iIF @Astea_ErrorLevel < 3 OR @Astea_Serial = 'REMTEST' RETURNEXECUTE [Server2].Enov_Dev.dbo.fj_create_monitor @Astea_Serial,@Astea_Error_Code,@Astea_Text,@Astea_DT,@Result OUTPUTSelect @ErrorVal = @@ERROR/* Record Error for Diagnostics */IF (@ErrorVal != 0 OR @Result != 0) BEGIN INSERT INTO SysError (IDKey,IDKey2,RetVal,Msg) Select i.TrackDataIDKey,i.DB2_Key,@ErrorVal,'ASTEAINS' FROM inserted i END
Here's the sproc that's being called on Server2...CREATE PROCEDURE fj_create_monitor @serial_no varchar(30), /* Serial Number */@error_code varchar(8), /* Error Code */@comment varchar(254), /* Comment */@created_at datetime, /* timestamp */@l_return integer output as INSERT INTO fj_monitor ( comment, created_at, error_code, serial_no ) VALUES ( @comment, @created_at, @error_code, @serial_no) IF @@error <> 0 BEGIN select -1 return END --Commit select 0 returnGO
TIA,Ken