더북(TheBook)

11. 게시판의 글 삭제 페이지인 BoardDelete.aspx에서 사용할 저장 프로시저 구문을 다음과 같이 작성한다. 뒤에서 답변 페이지 구현 시 자세히 다루겠지만, 저장 프로시저 구문이 상당히 길다. 어떤 부모 글에 답변 글이 있을 때 해당 부모 글을 지우면 글을 삭제하지 않고 지워진 글로 수정하고, 답변 글이 모두 삭제되었을 때에야 같이 삭제되는 기능을 구현하고 있기 때문이다.

▼  /dbo/Stored Procedures/DotNetNote/DNN_DeleteNote.sql

–[7] 해당 글을 지우는 저장 프로시저: 답변 글이 있으면 업데이트하고 없으면 지운다.
Create Proc dbo.DeleteNote
  @Id Int,
  @Password NVarChar(30)  암호 매개 변수 추가
As
  Declare @cnt Int
  Select @cnt = Count(*) From Notes
  Where Id = @Id And Password = @Password
  
  If @cnt = 0
  Begin
      Return 0  번호와 암호가 맞는 게 없으면 0을 반환
  End
  
  Declare @AnswerNum Int
  Declare @RefOrder Int
  Declare @Ref Int
  Declare @ParentNum Int
  
  Select
      @AnswerNum = AnswerNum, @RefOrder = RefOrder,
      @Ref = Ref,             @ParentNum = ParentNum
  From Notes
  Where Id = @Id
  
  If @AnswerNum = 0
  Begin
      If @RefOrder > 0
      Begin
          UPDATE Notes SET RefOrder = RefOrder - 1
          WHERE Ref = @Ref AND RefOrder > @RefOrder
          UPDATE Notes SET AnswerNum = AnswerNum - 1 WHERE Id = @ParentNum
      End
      Delete Notes Where Id = @Id
      Delete Notes
      WHERE
          Id = @ParentNum AND ModifyIp = N((DELETED))AND AnswerNum = 0
  End
  Else
  Begin
      Update Notes
      Set
          Name = N(Unknown), Email =, Password =,
          Title = N(삭제된 글입니다.),
          Content = N(삭제된 글입니다.+ N‘현재 답변이 포함되어 있기 때문에 내용만 삭제되었습니다.),
          ModifyIp = N((DELETED)), FileName =,
          FileSize = 0, CommentCount = 0
      Where Id = @Id
  End
Go

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.