Просто странная проблема с оператором SQL. Я использую оператор WITH
для сбора родительских и дочерних строк для древовидной структуры.SQL WITH CTE, за которым следует проблема с удалением
Затем я хочу удалить родителя и только их детей.
Мой код выглядит следующим образом (в хранимой процедуре):
DECLARE @AssignmentIds TABLE
(
AssignmentIds int
);
with DeleteTree(AssignmentID)
as
(
select AssignmentID
from Assignment
where AssignmentID = @AssignmentID
union all
select a.AssignmentID
from Assignment a
join DeleteTree d on a.ParentID = d.AssignmentID
)
/* insert results of above with into table var*/
insert into @AssignmentIds
select AssignmentID from DeleteTree
/*This select returns the CORRECT Ids!*/
/*SELECT * from @AssignmentIds*/
/*Delete Roster Info*/
delete from [dbo].[Roster]
where [AssignmentId] in (select AssignmentId from @AssignmentIds)
/*Delete Assignments*/
delete from [dbo].[Assignment]
where [AssignmentID] in (select AssignmentID from @AssignmentIds)
Странная часть, что, если я бегу избранная на результатах работы с, я правильно список правильных идентификаторов назначения ,
Но когда я запускаю оператор delete
, он удаляет все строки в таблице назначений, а не только идентификаторы, найденные оператором with!
Привет, Георгий, да, я проверил и нет каскадного удаления в таблице таблиц списков или заданий - спасибо за комментарий. – user1191559