Tsql 触发器插入同一行两次

Tsql 触发器插入同一行两次,tsql,triggers,Tsql,Triggers,首先,我不是一个有经验的程序员,所以这个问题可能看起来有点愚蠢。我编写了一个触发器,当第一个表中的状态字段更新时,它将向第二个表插入一行。问题是,它两次插入同一行,第二个问题是我是否更新了该触发器运行的第一个表中的任何字段。请帮忙。这就是触发器的样子 CREATE TRIGGER [c_CRM].[TR_TICKETLOG] ON [c_CRM].[T_SUPPORT_TICKETS] AFTER INSERT, UPDATE AS BEGIN -- SET NOC

首先,我不是一个有经验的程序员,所以这个问题可能看起来有点愚蠢。我编写了一个触发器,当第一个表中的状态字段更新时,它将向第二个表插入一行。问题是,它两次插入同一行,第二个问题是我是否更新了该触发器运行的第一个表中的任何字段。请帮忙。这就是触发器的样子

CREATE TRIGGER [c_CRM].[TR_TICKETLOG]
   ON [c_CRM].[T_SUPPORT_TICKETS]
   AFTER INSERT, UPDATE 

  AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
SET NOCOUNT ON;


DECLARE @TicketID int = (SELECT F_Ticket_ID FROM INSERTED)
DECLARE @StatusID int = (SELECT F_Ticket_Status_ID FROM INSERTED)
DECLARE @UpdateID int = (SELECT F_Ticket_Updated_By FROM INSERTED)
DECLARE @UserID int = (SELECT userID FROM FLEXVIEWS_USERS WHERE userID=@UpdateID)



IF(@StatusID IS NOT NULL)
BEGIN

DECLARE @message nvarchar(max) = (CASE @StatusID WHEN '1' THEN 'Ticket status set to Ticket Created' WHEN '2' THEN 'Ticket status set to Service in progress' WHEN '3' THEN 'Ticket status set to Awaiting client response' WHEN '4' THEN 'Ticket status set to Closed' WHEN '5' THEN 'Ticket status set to Pending' WHEN '6' THEN 'Ticket status set to Ticket Removed' ELSE ' ' END);
INSERT INTO c_CRM.T_TICKET_LOG (F_Ticket_Log_Ticket_ID, F_Ticket_Log_User_ID, F_Ticket_Log_Time, F_Ticket_Log_Message) VALUES (@TicketID, @UserID, GETDATE(), @message);
UPDATE T_SUPPORT_TICKETS SET F_Ticket_Updated_On = GETDATE() WHERE F_Ticket_ID = @TicketID;
END

ELSE
        UPDATE c_CRM.T_TICKET_LOG
        SET F_Ticket_Log_Message = NULL
        WHERE F_Ticket_Log_Ticket_ID = @TicketID;
END

更改触发器定义以在[c_CRM].[T_SUPPORT_TICKETS]上创建触发器[c_CRM].[TR_TICKETLOG],插入后删除更新(如果不需要)触发器已损坏。inserted可以包含多行或不包含行。需要更新,但当我尝试单独使用Insert时,它只返回了一行,这很好,但我需要它来进行更新。inserted table for status字段将始终有一个值,因为它设置为默认值,事实上,如果你的第二条评论是对我的回应,那么我认为你错过了我说的话。插入的行可以包含,比如说,10行。这一行:DECLARE@StatusID int=SELECT F_Ticket_Status_ID FROM INSERTED和其他类似的行将出错,因为它试图在右侧返回10个值,但在左侧有一个标量变量。该变量不能包含10个不同的值。您需要编写基于集合的语句,以识别插入的语句可以包含多行。