Simply get the logically deleted rows into a temp table and than join that temp table with each related table and update the deleted fields in them tables.
You can simply use the deleted table itself to join with each table you want to update but inserting rows into temp table only where field deleted = 1 limits the number or rows in your temp table. and joining a relatively smaller table will give you some performance boost. please see below:
ALTER TRIGGER [dbo].[trDeleteProject] ON [dbo].[Project]
FOR UPDATE
AS
BEGIN
SET NOCOUNT ON;
-- Get logically deleted rows into a temp table
SELECT * INTO #temp
FROM Inserted i
WHERE i.deleted = 1
--1.)Remove programs when a project is deleted
UPDATE P
SET p.Deleted = 1
FROM #temp t INNER JOIN ProgramProject p ON P.ProjectID = t.ProjectID
--2.)Remove project contact roles when you delete a project
UPDATE Pr
SET pr.Deleted = 1
FROM #temp t INNER JOIN ProjectContactRole pr ON Pr.ProjectID = t.ProjectID
--3.)Remove sub projects when you delete a project
UPDATE SP
SET SP.Deleted = 1
FROM #temp t INNER JOIN SubProject sp ON SP.ProjectID = t.ProjectID
--4.)Remove any transport system when you delete a project
UPDATE PTS
SET PTS.Deleted = 1
FROM #temp t INNER JOIN ProjectTransportSystem PTS ON PTS.ProjectID = t.ProjectID
--5.)Remove any project mechanical architecture when you delete a project
UPDATE PMA
SET PMA.Deleted = 1
FROM #temp t INNER JOIN ProjectMechanicalArchitecture PMA ON PMA.ProjectID = t.ProjectID
--6.)Remove any install personnel when you delete a project
UPDATE PIP
SET PIP.Deleted = 1
FROM #temp t INNER JOIN ProjectInstallPersonnel PIP ON PIP.ProjectID = t.ProjectID
END
Update
Since you have mentioned you would like to update the table using a single projectID at a time. to achieve this you will need to create a while loop along with a temp table again and loop through your temp table to update records in each table projectid by projectid which I really think is an overkill for a fairly simply task. see below :
ALTER TRIGGER [dbo].[trDeleteProject] ON [dbo].[Project]
FOR UPDATE
AS
BEGIN
SET NOCOUNT ON;
--check if the Deleted field was updated
DECLARE @ProjectID int
SELECT * INTO #Temp
FROM Inserted
WHERE deleted = 1
--did they want to delete it? (1)
WHILE EXISTS (SELECT * FROM #Temp)
BEGIN
SELECT TOP 1 @ProjectID = ProjectID
FROM #Temp
--1.)Remove programs when a project is deleted
UPDATE ProgramProject SET Deleted=1 WHERE ProjectID = @ProjectID
--2.)Remove project contact roles when you delete a project
UPDATE ProjectContactRole SET Deleted=1 WHERE ProjectID = @ProjectID
--3.)Remove sub projects when you delete a project
--UPDATE SubProject SET Deleted=1 WHERE ProjectID = @ProjectID
--4.)Remove any transport system when you delete a project
UPDATE ProjectTransportSystem SET Deleted=1 WHERE ProjectID = @ProjectID
--5.)Remove any project mechanical architecture when you delete a project
UPDATE ProjectMechanicalArchitecture SET Deleted=1 WHERE ProjectID = @ProjectID
--6.)Remove any install personnel when you delete a project
UPDATE ProjectInstallPersonnel SET Deleted=1 WHERE ProjectID = @ProjectID
DELETE FROM #Temp WHERE ProjectID = @ProjectID
END
END