ASP.NET 기초 강의실

시삽: 레드플러스 님 
게시판 이동:
 제목 : 테이블 및 저장 프로시저
글번호: 289
작성자: 레드플러스
작성일: 2008/07/14 오전 9:38:00
조회수: 4347

1-------------------------------------- 2---답변형 게시판 응용 프로그램 3-------------------------------------- 4 5--[0] 답변형 게시판(Reply)용 테이블 설계 6Create Table dbo.Reply 7( 8 Num Int Identity(1, 1) Not Null Primary Key, --번호 9 Name VarChar(25) Not Null, --이름 10 Email VarChar(100) Null, --이메일 11 Title VarChar(150) Not Null, --제목 12 PostDate DateTime Default GetDate() Not Null, --작성일 13 PostIP VarChar(15) Not Null, --작성IP 14 Content Text Not Null, --내용 15 Password VarChar(20) Not Null, --비밀번호 16 ReadCount Int Default 0, --조회수 17 Encoding VarChar(10) Not Null, --인코딩(HTML/Text) 18 Homepage VarChar(100) Null, --홈페이지 19 ModifyDate DateTime Null, --수정일 20 ModifyIP VarChar(15) Null, --수정IP 21 ---------- 22 Ref Int Not Null, --참조(부모글) 23 Step Int Default 0, --답변깊이(레벨) 24 RefOrder Int Default 0 --답변순서 25) 26Go 27 28--[1]~[6] 기본 SQL문 4가지 작성 29Select * From Reply 30Go 31 32--[7] 답변 게시판(Reply)에 글을 작성하는 저장 프로시저 : WriteReply 33Create Proc dbo.WriteReply 34 @Name VarChar(25), 35 @Email VarChar(100), 36 @Title VarChar(150), 37 @PostIP VarChar(15), 38 @Content Text, 39 @Password VarChar(20), 40 @Encoding VarChar(10), 41 @Homepage VarChar(100) 42As 43 -- 현재까지 테이블의 최대 Ref(참조) 값을 구해서, 44 -- 그 값이 0보다 크다면, 해당 Ref + 1로 데이터 저장 45 -- Ref는 부모글의 Num 필드와는 다르다. 46 Declare @MaxRef Int 47 Select @MaxRef = Max(Ref) From Reply 48 If @MaxRef > 0 49 Begin 50 Insert Reply 51 ( 52 Name, Email, Title, PostIP, Content, 53 Password, Encoding, Homepage, Ref 54 ) 55 Values 56 ( 57 @Name, @Email, @Title, @PostIP, @Content, 58 @Password, @Encoding, @Homepage, @MaxRef + 1 59 ) 60 End 61 Else 62 Begin 63 Insert Reply 64 ( 65 Name, Email, Title, PostIP, Content, 66 Password, Encoding, Homepage, Ref 67 ) 68 Values 69 ( 70 @Name, @Email, @Title, @PostIP, @Content, 71 @Password, @Encoding, @Homepage, 1 72 ) 73 End 74Go 75 76--[8] 답변 게시판(Reply)에서 데이터를 읽어오는 저장 프로시저 : ListReply 77--Drop Proc dbo.ListReply 78Create Procedure dbo.ListReply 79As 80 Select * From Reply Order By Ref Desc, RefOrder Asc 81Go 82 83--[9] 해당 글을 세부적으로 읽어오는 저장 프로시저 : ViewReply 84Create Procedure dbo.ViewReply 85 @Num Int 86As 87 Update Reply Set ReadCount = ReadCount + 1 88 Where Num = @Num 89 90 Select * From Reply Where Num = @Num 91Go 92 93--[10] 해당 글에 대한 비밀번호 읽어오는 저장 프로시저 : ReadPassword 94Create Proc dbo.ReadPasswordReply 95 @Num Int 96As 97 Select Password From Reply Where Num = @Num 98Go 99 100--[11] 해당 글 지우는 저장 프로시저 : procDeleteReply 101Create Proc dbo.DeleteReply 102 @Num Int 103As 104 Delete Reply Where Num = @Num 105Go 106 107--[12] 해당 글을 수정하는 저장 프로시저 : ModifyeReply 108Create Proc dbo.ModifyeReply 109 @Name VarChar(25), 110 @Email VarChar(100), 111 @Title VarChar(150), 112 @ModifyIP VarChar(15), 113 @ModifyDate DateTime, 114 @Content Text, 115 @Encoding VarChar(10), 116 @Homepage VarChar(100), 117 @Num Int 118As 119 Update Reply 120 Set 121 Name = @Name, 122 Email = @Email, 123 Title = @Title, 124 ModifyIP = @ModifyIP, 125 ModifyDate = @ModifyDate, 126 Content = @Content, 127 Encoding = @Encoding, 128 Homepage = @Homepage 129 Where Num = @Num 130Go 131 132--[13] 답변 게시판(Reply)에 글을 답변하는 저장 프로시저 : ReplyReply 133--Drop Proc dbo.ReplyReply 134Create Proc dbo.ReplyReply 135 @Name VarChar(25), 136 @Email VarChar(100), 137 @Title VarChar(150), 138 @PostIP VarChar(15), 139 @Content Text, 140 @Password VarChar(20), 141 @Encoding VarChar(10), 142 @Homepage VarChar(100), 143 @ParentNum Int -- 부모글의 번호 View.aspx?Num=5 이면, 5가 ParentNum 144As 145 -- 부모글의 번호를 기준으로 Ref/Step/RefOrder 가져오기 146 Declare @Ref Int 147 Declare @Step Int 148 Declare @RefOrder Int 149 Select @Ref = Ref, @Step = Step, @RefOrder = RefOrder 150 From Reply 151 Where Num = @ParentNum 152 153 Begin Tran 154 Update Reply 155 Set RefOrder = RefOrder + 1 156 Where 157 Ref = @Ref 158 And 159 RefOrder > @RefOrder 160 161 Insert Reply 162 ( 163 Name, Email, Title, PostIP, Content, Password, 164 Encoding, Homepage, Ref, Step, RefOrder 165 ) 166 Values 167 ( 168 @Name, @Email, @Title, @PostIP, @Content, @Password, 169 @Encoding, @Homepage, @Ref, @Step + 1, @RefOrder + 1 170 ) 171 Commit Tran 172Go 173--테스트URL : http://sample.redplus.net/Web/Reply/List.aspx 174--작성자 : 박용준(RedPlus) 175 176 177 178 179 180--[0] 답변형 게시판 쿼리문 연습 181--Drop Table dbo.ReplyTest 182Create Table dbo.ReplyTest 183( 184 Num Int Identity(1, 1) Primary Key Not Null, -- 번호 185 Title VarChar(150) Not Null, -- 제목 186 -- ... 187 Ref Int Default 0, --참조글(부모글;최상위글;답변이아닌글;그룹번호;Group) 188 Step Int Default 0, --들여쓰기(한단계 답변:한단계들여쓰기;Level;Depth) 189 RefOrder Int Default 0 --같은 그룹내에서의 정렬순서(Position) 190) 191Go 192--[1] 처음으로 게시판 글쓰기 193Insert Into ReplyTest(Title, Ref) Values('첫번째 부모글', 1) 194 195--[2] 새로운 글 입력 : Write.aspx.cs 196Begin 197 Declare @MaxRef Int 198 Select @MaxRef = Max(Ref) From ReplyTest 199 200 Insert Into ReplyTest(Title, Ref) 201 Values('두번째 부모글', @MaxRef + 1) 202End 203 204--[!] 출력 205Select * From ReplyTest Order By Ref Desc, RefOrder Asc 206 207--[3] 첫번째 부모글에 한단계 답변 208Insert ReplyTest(Title, Ref, Step, RefOrder) 209Values('>>첫번째 부모글에 답변', 1, 0+1, 0+1) 210 211--[4] 첫번째 부모글에 답변의 답변 : [3]번글의 답변 212Insert ReplyTest(Title, Ref, Step, RefOrder) 213Values('>>>>첫번째 부모글에 답변의 답변', 1, 2, 2) 214 215--[5] 두번째 부모글에 답변 : [2]번글의 답변 216Insert ReplyTest(Title, Ref, Step, RefOrder) 217Values('>>두번째 부모글에 답변', 2, 1, 1) 218 219--[!] 출력 220Select * From ReplyTest Order By Ref Desc, RefOrder Asc 221 222--[6] 첫번째 부모글에 한단계 답변(나중에) : [1]번 글에 답변 223Update ReplyTest Set RefOrder = RefOrder + 1 224Where Ref = 1 And RefOrder > 0 -- 부모글의 RefOrder(0)보다 큰 레코드 모드 업데이트 225Insert ReplyTest(Title, Ref, Step, RefOrder) 226Values('>>첫번째 부모글에 답변(나중에)', 1, 0+1, 0+1) 227 228--[7] [6]번 레코드에 답변 229Update ReplyTest Set RefOrder = RefOrder + 1 230Where Ref = 1 And RefOrder > 1 -- 부모글의 RefOrder(0)보다 큰 레코드 모드 업데이트 231Insert ReplyTest(Title, Ref, Step, RefOrder) 232Values('>>>>첫번째 부모글에 답변(나중에)의 답변', 1, 1+1, 1+1) 233 234--[!] 데이터 출력 235Select * From ReplyTest Order By Ref Desc, RefOrder Asc 236 237-- 저장 프로시저화 238--[1] 입력 저장 프로시저 : ReplyTestWrite.aspx 239Create Procedure dbo.WriteReplyTest 240 @Title VarChar(150) 241As 242 -- 현재까지 테이블의 최대 Ref(참조) 값을 구해서, 243 -- 그 값이 0보다 크다면, 해당 Ref + 1로 데이터 저장 244 -- Ref는 부모글의 Num 필드와는 다르다. 245 Declare @MaxRef Int 246 Select @MaxRef = Max(Ref) From ReplyTest 247 If @MaxRef > 0 248 Begin 249 Insert Into ReplyTest(Title, Ref) 250 Values(@Title, @MaxRef + 1) -- MaxRef+1로 저장 251 End 252 Else 253 Begin 254 Insert Into ReplyTest(Title, Ref) 255 Values(@Title, 1) -- 첫번째 레코드는 Ref를 1로 저장 256 End 257Go 258--WriteReplyTest '첫번째 부모글' 259--WriteReplyTest '두번째 부모글' 260 261--[2] 출력 저장 프로시저 : ReplyTestList.aspx 262Create Proc dbo.ListReplyTest 263As 264 Select * From ReplyTest 265 Order By Ref Desc, RefOrder Asc 266Go 267 268--ListReplyTest 269--[3] 답변 저장 프로시저 270--Drop Proc dbo.ReplyReplyTest 271Create Proc dbo.ReplyReplyTest 272 @Title VarChar(150), 273 @ParentRef Int, -- 부모글의 Ref 274 @ParentStep Int, -- 부모글의 Step 275 @ParentRefOrder Int -- 부모글의 RefOrder 276As 277 Begin Tran 278 --[A] Ref가 같고, RefOrder가 부모글보다 큰 모든 답변글들의 279 -- RefOrder값을 1증가 280 Update ReplyTest 281 Set RefOrder = RefOrder + 1 282 Where 283 Ref = @ParentRef 284 And 285 RefOrder > @ParentRefOrder 286 --[B] Ref는 부모글의 Ref를 그대로 저장 287 -- Step은 부모글의 Step + 1로 저장 288 -- RefOrder는 부모글의 RefOrder + 1로 저장([A]에서 업데이트 후) 289 Insert ReplyTest(Title, Ref, Step, RefOrder) 290 Values(@Title, @ParentRef, @ParentStep+1, @ParentRefOrder + 1) 291 Commit Tran 292Go 293
 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트


관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 [!] 3Tier + Enterprise Library 한줄 메모장(Memo Appl... - 레드플러스 2008-07-16 5906
  [!] 답변형 게시판 : /WebReply/ - 레드플러스 2008-07-14 5467
현재글 테이블 및 저장 프로시저 - 레드플러스 2008-07-14 4347
다음글 [!] 사진 게시판 : /WebPhoto/ - 레드플러스 2008-07-10 7294
 
손님 사용자 Anonymous (손님)
로그인 Home