본문 바로가기

ASP.NET_ 낱말퍼즐/SQL 프로시져

ASP.NET으로 '낱말잇기 퍼즐' 만들기_ SQL[table / insert / list / view ]

sql에서 [table / insert / list / view ] 만들기

'낱말잇기 퍼즐'을 직접 만들 수 있고, 목록(list)에서 만들어진 퍼즐을 골라 풀어 볼 수 있는 게시판을 만들어 보자!
★ 게시판을 위한 DB를 구성
테이블은 퍼즐의 정보를 담고있는 한 개의 테이블만으로 충분하다.



-- WordPuzzle 테이블

  create table WordPuzzle
 (
 idx int PRIMARY KEY,
 widthQuestion nvarchar(2000),
 lenghtQuestion nvarchar(2000),
 regDate smalldatetime default(getdate()),
 answer nvarchar(160)
 )

idx - 퍼즐의 글번호('목록'에서 '글보기'로 페이지가 이동 할 때, 어떤 글이 클릭됐는지 알기위해 같이 넘겨 줘야한다.)  
widthQuestion  - 가로문제
lenghtQuestion  - 세로문제
regDate  - 작성일(글의 작성일을 나타내며, 목록의 제목으로도 사용된다.)
answer  - 정답(정답은 배열[0]~[χ]까지의 값을 나타낸다.)
퍼즐의 크기는 최소 5×5 ~ 9×9이기 때문에 answer의 크기는 81(9×9)칸을 고려하여 넉넉하게 160으로 지정했다.



-- Insert 프로시져
실행방법: SP_WordPuzzle_Insert '1.가로문제위치,'2.세로문제위치,'망,,,,,,둥,,,,,이,,오,,,치,,,,,,발,,,,,전,,,~~..'
  create proc SP_WordPuzzle_Insert
 (
 @widthQuestion nvarchar(2000),
 @lenghtQuestion nvarchar(2000),
 @answer nvarchar(160)
 )
 as
 begin
        insert into WordPuzzle(idx,widthQuestion,lenghtQuestion,answer) 
        values (doubleo.FUNC_WordPuzzle(),@widthQuestion,@lenghtQuestion,@answer)
 end

widthQuestion, lenghtQuestion, answer은 프로시져를 호출 할 때 넘어오는 값을 사용하기 때문에 변수로 선언했고, 
글번호 idx는 프로시져 안에서 자동증가 함수를 호출하여 사용하기 때문에 별도로 변수를 선언하지 않았다.
프로시져를 호출 할 때 사용되는 변수는 프로시져명(@변수명 자료형(크기))식으로 선언하며
그 외에 프로시져 안에서 사용 할 변수는 begin안에 declare @변수명 자료형(크기)식으로 선언한다.



-- View 프로시져
실행방법: SP_WordPuzzle_View 1
 create proc SP_WordPuzzle_View(@idx int)
 as
 begin
        select idx,widthQuestion,lenghtQuestion,answer,
        replace(convert(char(16),regDate,120),'-','.')as regDate,
        cast(datepart(yy,regDate) as char(4))+'년'
        + cast(datepart(MM,regDate) as char(2))+'월'
        + cast(datepart(dd,regDate) as char(2))+'일 낱말퀴즈' as title
        from WordPuzzle  where idx = @idx
 end

프로시져를 호출 할 때 넘어오는 글번호(@idx)로 해당 글보기가 가능하다.
등록일을 '2011.02.10 10:42'로 출력하기 위하여 
convert(char(16),regDate,120) - 시분초까지 나오는 스타일 120으로 지정, 분까지 출력하기 위하여 char(16)로 크기지정. 
replace(convert한 날짜시간, '-','.') - convert한 날짜시간에서 '-'를 ','으로 바꿔주기 위해 사용.
제목은 '2011년2월10일 낱말퀴즈'로 출력하기 위하여
datepart(yy,regDate) - regDate의 연도만 출력.
datepart(MM,regDate) - regDate의 월만 출력.
datepart(dd,regDate) - regDate의 일만 출력.
cast( A as 자료형) - A의 자료형 변환. 




-- List 프로시져
실행방법: SP_WordPuzzle_List 
 create proc SP_WordPuzzle_List
 as
 begin
         select idx, replace(convert(char(16),regDate,120),'-','.')as regDate,
         cast(datepart(yy,regDate) as char(4))+'년'
        + cast(datepart(MM,regDate) as char(2))+'월'
        + cast(datepart(dd,regDate) as char(2))+'일 낱말퀴즈' as title 
         from WordPuzzle order by idx desc
 end

최근에 작성한 순서대로(글번호가 클수록 최근) 정렬하도록 order by idx desc 사용.