触发存储信息重复

时间:2014-04-09 10:08:01

标签: sql-server

我正在使用Trigger&当我通过UI表单填写信息时,此触发器在桌面上触发。第一次在表中插入正确的记录。

再次更新信息,然后在表中存储两条记录。 平均两行插入表中以防止更新。我在触发器中做错了什么。

我的触发器如下:

ALTER TRIGGER [dbo].[trPkgDPRBidSubmissionDetails] 
   ON  [dbo].[tblPkgDPRBidSubmissionDetails] 
   AFTER insert, update, delete
AS 

BEGIN

 DECLARE @Action as varchar(50);
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;


SET @Action = 'Insert'; -- Set Action to Insert by default.
IF EXISTS(SELECT * FROM DELETED)
BEGIN
    SET @Action = 
        CASE
           WHEN EXISTS(SELECT * FROM INSERTED) THEN 'UPDATE' 
           ELSE 'DELETE' 
        END
END


if( @Action = 'DELETE')
begin 
    insert into tblPkgDPRBidSubmissionDetailsAT(iUserId,cAction, dtAction,iActionOwner,iPackage,dtInitialDesignReport,dtDPR, dtBidDocuments,dtExternalReview1,dtComplianceToPWD1,dtComplianceToExtAgency1,dtExternalReview2,dtComplianceToPWD2,dtComplianceToExtAgency2, dtApprovalFromExternalAgency,dtIFB,dtUpToIssue,dtPreMeeting,dtBidOpeningMeetingOriginal, dtBidOpeningMeetingExtension1,dtBidOpeningMeetingExtension2,dtBidOpeningMeetingExtension3, iNumberOfBidsSold,iNumberOfBidsReceived)

select iUserId,@Action, getdate(), 1,iPackage,dtInitialDesignReport, dtDPR, dtBidDocuments,dtExternalReview1, dtComplianceToPWD1,dtComplianceToExtAgency1,dtExternalReview2,dtComplianceToPWD2,dtComplianceToExtAgency2,dtApprovalFromExternalAgency, dtIFB,dtUpToIssue,dtPreMeeting,dtBidOpeningMeetingOriginal,dtBidOpeningMeetingExtension1,dtBidOpeningMeetingExtension2,dtBidOpeningMeetingExtension3, iNumberOfBidsSold,iNumberOfBidsReceived
from deleted;
end

else 
begin

insert into tblPkgDPRBidSubmissionDetailsAT(iUserId,cAction, dtAction,iActionOwner,iPackage,dtInitialDesignReport,dtDPR, dtBidDocuments,dtExternalReview1,dtComplianceToPWD1,dtComplianceToExtAgency1,dtExternalReview2,dtComplianceToPWD2,dtComplianceToExtAgency2, dtApprovalFromExternalAgency,dtIFB,dtUpToIssue,dtPreMeeting,dtBidOpeningMeetingOriginal, dtBidOpeningMeetingExtension1,dtBidOpeningMeetingExtension2, dtBidOpeningMeetingExtension3,iNumberOfBidsSold,iNumberOfBidsReceived)

select iUserId,@Action, getdate(), 1,iPackage,dtInitialDesignReport, dtDPR, dtBidDocuments,dtExternalReview1, dtComplianceToPWD1,dtComplianceToExtAgency1,dtExternalReview2,dtComplianceToPWD2,dtComplianceToExtAgency2,dtApprovalFromExternalAgency, dtIFB,dtUpToIssue,dtPreMeeting,dtBidOpeningMeetingOriginal,dtBidOpeningMeetingExtension1,dtBidOpeningMeetingExtension2,dtBidOpeningMeetingExtension3, iNumberOfBidsSold,iNumberOfBidsReceived
from inserted;
end
-- Insert statements for trigger here
-- action owner field to be udpated

END

1 个答案:

答案 0 :(得分:0)

ELSE块中的代码处理INSERT和UPDATE操作,因此在两种情况下最终都会在tblPkgDPRBidSubmissionDetailsAT表中插入另一行。

我认为这就是你所需要的:

if( @Action = 'DELETE')
begin 
    insert into tblPkgDPRBidSubmissionDetailsAT(iUserId,cAction, dtAction,iActionOwner,iPackage,dtInitialDesignReport,dtDPR, dtBidDocuments,dtExternalReview1,dtComplianceToPWD1,dtComplianceToExtAgency1,dtExternalReview2,dtComplianceToPWD2,dtComplianceToExtAgency2, dtApprovalFromExternalAgency,dtIFB,dtUpToIssue,dtPreMeeting,dtBidOpeningMeetingOriginal, dtBidOpeningMeetingExtension1,dtBidOpeningMeetingExtension2,dtBidOpeningMeetingExtension3, iNumberOfBidsSold,iNumberOfBidsReceived)    
    select iUserId,@Action, getdate(), 1,iPackage,dtInitialDesignReport, dtDPR, dtBidDocuments,dtExternalReview1, dtComplianceToPWD1,dtComplianceToExtAgency1,dtExternalReview2,dtComplianceToPWD2,dtComplianceToExtAgency2,dtApprovalFromExternalAgency, dtIFB,dtUpToIssue,dtPreMeeting,dtBidOpeningMeetingOriginal,dtBidOpeningMeetingExtension1,dtBidOpeningMeetingExtension2,dtBidOpeningMeetingExtension3, iNumberOfBidsSold,iNumberOfBidsReceived
    from deleted;
end

else 
begin
    if @Action = 'INSERT'
        insert into tblPkgDPRBidSubmissionDetailsAT(iUserId,cAction, dtAction,iActionOwner,iPackage,dtInitialDesignReport,dtDPR, dtBidDocuments,dtExternalReview1,dtComplianceToPWD1,dtComplianceToExtAgency1,dtExternalReview2,dtComplianceToPWD2,dtComplianceToExtAgency2, dtApprovalFromExternalAgency,dtIFB,dtUpToIssue,dtPreMeeting,dtBidOpeningMeetingOriginal, dtBidOpeningMeetingExtension1,dtBidOpeningMeetingExtension2, dtBidOpeningMeetingExtension3,iNumberOfBidsSold,iNumberOfBidsReceived)    
        select iUserId,@Action, getdate(), 1,iPackage,dtInitialDesignReport, dtDPR, dtBidDocuments,dtExternalReview1, dtComplianceToPWD1,dtComplianceToExtAgency1,dtExternalReview2,dtComplianceToPWD2,dtComplianceToExtAgency2,dtApprovalFromExternalAgency, dtIFB,dtUpToIssue,dtPreMeeting,dtBidOpeningMeetingOriginal,dtBidOpeningMeetingExtension1,dtBidOpeningMeetingExtension2,dtBidOpeningMeetingExtension3, iNumberOfBidsSold,iNumberOfBidsReceived
        from inserted;
end