Assuming that you have a unique id in your MILESTONE_SCHEDULE
table, to achieve what you are looking for you can try like following.
UPDATE T
SET ACTUAL_FINISH = GETDATE()--or whatever you want
FROM MILESTONE_SCHEDULE T
INNER JOIN
(
SELECT ID,
(DATEDIFF(dd, ACTUAL_START, GETDATE()) )
-(DATEDIFF(wk, ACTUAL_START, GETDATE()) * 2)
-(CASE WHEN DATENAME(dw, ACTUAL_START) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, GETDATE()) = 'Saturday' THEN 1 ELSE 0 END) AS DayDif
FROM MILESTONE_SCHEDULE T
) T1
ON T1.ID= T.ID
WHERE T1.DayDif > 3
AND T.MILESTONE_TYPE_ID = 398
AND T.ACTUAL_FINISH IS NULL
AND T.ACTUAL_START IS NOT NULL;
Example with Dummy data
Following query will help to update the value.
DECLARE @MILESTONE_SCHEDULE TABLE(ID INT ,ACTUAL_START DATETIME ,ACTUAL_FINISH DATETIME)
INSERT INTO @MILESTONE_SCHEDULE
VALUES(1,GETDATE()-10,NULL),(2,GETDATE(),NULL)
UPDATE T
SET ACTUAL_FINISH = GETDATE()
FROM @MILESTONE_SCHEDULE T
INNER JOIN
(
SELECT ID,
(DATEDIFF(dd, ACTUAL_START, GETDATE()) )
-(DATEDIFF(wk, ACTUAL_START, GETDATE()) * 2)
-(CASE WHEN DATENAME(dw, ACTUAL_START) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, GETDATE()) = 'Saturday' THEN 1 ELSE 0 END) AS DayDif
FROM @MILESTONE_SCHEDULE T
) T1
ON T1.ID= T.ID
WHERE T1.DayDif > 3
SELECT * FROM @MILESTONE_SCHEDULE
Output:
ID ACTUAL_START ACTUAL_FINISH
1 2018-03-02 11:26:25.707 2018-03-12 11:26:25.707
2 2018-03-12 11:26:25.707 NULL