Sample Header Ad - 728x90

After Insert Trigger not working in Sql Server

0 votes
1 answer
2078 views
I have created the 2 After Insert Trigger on same Table. 1st Trigger executed successfully. But 2nd Trigger is not executing and giving the exception from c# code **'Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded.'** Earlier I used the CTE in my trigger but I read that CTE is not supported in Triggers. Then I used Temp Tables. ALTER TRIGGER [dbo].[CodedDatas_INS_ProjectOperationalDataUserWise] ON [LIO00110].[dbo].[CodedDatas] AFTER INSERT AS BEGIN --UPDATE [SydCoding].[DBO].[ProjectReportOperationDataUserWise] -- SET DocCorrected = 0 SET NOCOUNT ON; CREATE TABLE #CTE1 (EnteredBy varchar(50), ReviewedTimeInMin Decimal(30,4),CodingTimeInMin Decimal(30,4)); CREATE TABLE #CTE2 (EnteredBy varchar(50), CodingTimeInHR Decimal(30,4),ReviewedTimeInHR Decimal(30,4)); CREATE TABLE #CTE3 (EnteredBy varchar(50), DocCoded int); CREATE TABLE #CTE4 (EnteredBy varchar(50), DocReviewed int); CREATE TABLE #CTE5 (EnteredBy varchar(50), DocCorrected int); CREATE TABLE #CTE6 (EnteredBy varchar(50), LastModified varchar(50)); CREATE TABLE #CTE7 (ProjectId varchar(50),EnteredBy varchar(50), CODINGRATE Decimal(30,4), REVIEWRATE Decimal(30,4), DocCoded int, DocReviewed int, CodingTimeInMin Decimal(30,4),ReviewedTimeInMin Decimal(30,4),DocCorrected int,LastModified varchar(50),PerDocCorrected Decimal(30,4)); INSERT INTO #CTE1 (EnteredBy,ReviewedTimeInMin,CodingTimeInMin) Select C1.EnteredBy,ReviewedTimeInMin=Sum(ROUND(CAST(C1.QATime AS FLOAT)/(CAST(60 AS FLOAT)),4)), CodingTimeInMin=Sum(ROUND(CAST(C1.CODINGTIME AS FLOAT)/(CAST(60 AS FLOAT)),4)) from Inserted C1 INNER JOIN (Select Document_Id,Max(LastModified) As LastModified from Inserted Group By Document_Id) C2 on C1.Document_ID=C2.Document_ID And C1.LastModified=C2.LastModified group by C1.EnteredBy; INSERT INTO #CTE2 (EnteredBy,CodingTimeInHR,ReviewedTimeInHR) Select CodingTimeInHR=ROUND(CodingTimeInMin/CAST(60 AS FLOAT), 4) , ReviewedTimeInHR=ROUND(ReviewedTimeInMin/CAST(60 AS FLOAT), 4), EnteredBy from #CTE1; INSERT INTO #CTE3 (EnteredBy,DocCoded) Select C1.EnteredBy,DocCoded=Count(C1.Document_Id) from Inserted C1 INNER JOIN (Select Document_Id,Max(LastModified) As LastModified from Inserted Group By Document_Id) C2 on C1.Document_ID=C2.Document_ID And C1.LastModified=C2.LastModified And C1.Coded=1 group by C1.EnteredBy; INSERT INTO #CTE4 (EnteredBy,DocReviewed) Select C1.EnteredBy,DocReviewed=Count(C1.Document_Id) from Inserted C1 INNER JOIN (Select Document_Id,Max(LastModified) As LastModified from Inserted Group By Document_Id) C2 on C1.Document_ID=C2.Document_ID And C1.LastModified=C2.LastModified And C1.Coded=1 AND C1.Revision=1 group by C1.EnteredBy; INSERT INTO #CTE5 (EnteredBy,DocCorrected) Select C1.EnteredBy,DocCorrected=Count(C1.Document_Id) from Inserted C1 INNER JOIN (Select Document_Id,Max(LastModified) As LastModified from Inserted Group By Document_Id) C2 on C1.Document_ID=C2.Document_ID And C1.LastModified=C2.LastModified And C1.IsCorrected=1 group by C1.EnteredBy; INSERT INTO #CTE6 (EnteredBy,LastModified) Select C1.EnteredBy,LastModified=Max(C2.LastModified) from Inserted C1 INNER JOIN (Select Document_Id,Max(LastModified) As LastModified from Inserted Group By Document_Id) C2 on C1.Document_ID=C2.Document_ID And C1.LastModified=C2.LastModified And C1.Coded=1 AND C1.Revision=1 group by C1.EnteredBy; INSERT INTO #CTE7 (ProjectId,EnteredBy,CODINGRATE,REVIEWRATE,DocCoded,DocReviewed,CodingTimeInMin,ReviewedTimeInMin,DocCorrected,LastModified,PerDocCorrected) Select ProjectId='LIO00110', CT3.EnteredBy, CODINGRATE=(CT3.DocCoded/NULLIF(CT2.CODINGTIMEINHR,0)), REVIEWRATE=(CT4.DocReviewed/NULLIF(CT2.ReviewedTimeInHR,0)),CT3.DocCoded,CT4.DocReviewed, CT1.CodingTimeInMin,CT1.ReviewedTimeInMin,CT5.DocCorrected,CT6.LastModified, PerDocCorrected=(Case When CT3.DocCoded>0 Then (Cast( (ROUND(cast(CT5.DocCorrected AS float)/cast(CT3.DocCoded AS float), 4))*100 As int )) Else 0.0000 END ) From #CTE3 CT3 Inner Join #CTE2 CT2 on CT3.EnteredBy=CT2.EnteredBy Inner Join #CTE4 CT4 on CT3.EnteredBy=CT4.EnteredBy Inner Join #CTE1 CT1 on CT3.EnteredBy=CT1.EnteredBy Inner Join #CTE6 CT6 on CT3.EnteredBy=CT6.EnteredBy Full Join #CTE5 CT5 on CT3.EnteredBy=CT5.EnteredBy; Select ProjectId,EnteredBy,CODINGRATE,REVIEWRATE,CodingTimeInMin,ReviewedTimeInMin,DocCoded,DocReviewed ,DocCorrected, PerDocCorrected,LastModified From #CTE7; MERGE INTO [SydCoding].[DBO].[ProjectReportOperationDataUserWise] AS target USING #CTE7 AS source ON target.ProjectId = source.ProjectId AND target.UserId = source.EnteredBy WHEN MATCHED THEN -- Update existing clients UPDATE SET target.[TotalCoded] = source.DocCoded, target.[TotalReviewed] = source.DocReviewed, target.[CodedTime] = source.CodingTimeInMin, target.[ReviewedTime] = source.ReviewedTimeInMin, target.[CodedRate] = source.CODINGRATE, target.[ReviewedRate] = source.REVIEWRATE, target.[DocCorrected] = source.DocCorrected, target.[PercentDocCorrected] = source.PerDocCorrected, target.[LastModifiedOn] = source.LastModified WHEN NOT MATCHED BY target THEN -- Insert new data INSERT ([ProjectId],[TotalCoded], [TotalReviewed], [CodedTime], [ReviewedTime], [CodedRate], [ReviewedRate], [DocCorrected], [PercentDocCorrected], [UserId], [CreatedOn],[LastModifiedOn]) VALUES (source.ProjectId, source.DocCoded, source.DocReviewed, source.CodingTimeInMin,source.ReviewedTimeInMin, source.CODINGRATE, source.REVIEWRATE, source.DocCorrected, source.PerDocCorrected, source.EnteredBy, GetDate(), source.LastModified) ; DROP TABLE #CTE1; DROP TABLE #CTE2; DROP TABLE #CTE3; DROP TABLE #CTE4; DROP TABLE #CTE5; DROP TABLE #CTE6; DROP TABLE #CTE7; End What is wrong in my trigger or I am doing something wrong. Please suggest.
Asked by Diya Rawat (23 rep)
Nov 21, 2022, 12:57 PM
Last activity: Nov 21, 2022, 05:01 PM