전에도 포스팅 했던게 있을듯 한데,
첨부파일이나, 태그 같은걸 구분자를 줘서 하나의 필드로 묶어야 하는 경우가 종종 있다.
(사실은 내가 하는 일에선 자주 있다)

그런데, 오라클이 많다보니 오라클에서 작업하다가 얼마전
MS-SQL을 접하게 되었다... ㄷㄷㄷㄷ

간단히 예를 들면?
TB_BBS( BOARD_ID, TITLE, CONTENTS ...) 라는 테이블이 있고,
태그를 관리하기 위해 BOARD_ID를 기준으로 태그를 관리한다고 치자.
TB_TAG( TAG_ID, BOARD_ID, TAG_NAME ...)

즉, 게시물 번호 1 의 태그들을  알려면
select TAG_NAME from TB_TAG where board_id = '1' 라는 말이다.



CREATE FUNCTION FN_TAGS (@pkey varchar(20)) RETURNS varchar(1000) AS

/***************************

태그 묶음 펑션

2009.02.26 V001 @정민철

****************************/

BEGIN

             DECLARE curTag CURSOR FOR

             SELECT TAG_NAME FROM TB_TAG WHERE BOARD_ID = @pkey

             OPEN curTag

 

             DECLARE @tagnames varchar(1000)

             DECLARE @tagname varchar(20)

             SET @tagnames = ''


             FETCH NEXT FROM curTag INTO @tagname

             WHILE @@FETCH_STATUS = 0

             BEGIN

               IF @tagnames = ''

                            BEGIN

                                       SET @tagnames = @tagname

                            END

               ELSE

                            BEGIN

                                       SET @tagnames = @tagnames + ',' + @tagname

                            END

 

               FETCH NEXT FROM curTag INTO @tagname

             END

            

             CLOSE curTag

             DEALLOCATE curTag

 

             return @tagnames

END



이렇게 만들면 아래같은 쿼리를 통해서

select FN_TAGS(board_id) as TAGS, TB_BBS.* from TB_BBS;

TAGS = 태그1, 태그2, 태그3
같은 값을 얻어올수 있당.

 

+ Recent posts