2011-01-30 6 views
1

은이 같은 폴더 구조를 가지고 :엔티티 프레임 워크 자체 참조 엔티티 삭제

Folder1 
    Folder1.1 
    Folder1.2 
Folder2 
    Folder2.1 
    Folder2.1.1 
and so on.. 

질문은 삭제 계단식 (즉 때 모든 아이들이도 삭제됩니다 Folder2 폴더 제거합니다.)하는 방법이다. MSSQL이 허용하지 않으므로 ON DELETE 동작을 설정할 수 없습니다. 수제 좀 줄래?

업데이트 :이 저장된 proc 파일을 작성했습니다. 그냥 그대로 두거나 수정해야합니까?

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE sp_DeleteFoldersRecursive 
    @parent_folder_id int 
AS 
BEGIN 
    SET NOCOUNT ON; 

    IF @parent_folder_id = 0 RETURN; 

    CREATE TABLE #temp(fid INT); 

    DECLARE @Count INT; 

    INSERT INTO #temp(fid) 
    SELECT FolderId FROM Folders WHERE FolderId = @parent_folder_id; 

    SET @Count = @@ROWCOUNT; 

    WHILE @Count > 0 
    BEGIN 
     INSERT INTO #temp(fid) 
      SELECT FolderId FROM Folders WHERE EXISTS 
        (SELECT FolderId FROM #temp 
        WHERE Folders.ParentId = #temp.fid) 
      AND NOT EXISTS 
        (SELECT FolderId FROM #temp 
        WHERE Folders.FolderId = #temp.fid);  

      SET @Count = @@ROWCOUNT;   
    END 

    DELETE Folders FROM Folders INNER JOIN #temp ON Folders.FolderId = #temp.fid; 
    DROP TABLE #temp; 
END 
GO 

답변

0

일반적으로 이것은 저장된 proc 또는 INSTEAD OF 트리거입니다. 이다

:

  • 매개 변수에서 Folder2 폴더의 계층 구조를 생성이/DELETED (예를 들어 재귀 CTE 접근 방식))
  • 한 DELETE 문이 계층 구조를 삭제

원형 계단식/외래 키 위반은 발생하지 않습니다.