[Sql Server] 배열 변수 사용 예

Posted by RAY.D
2015. 4. 13. 23:00 Database/My Sql
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.




DECLARE @PSTR VARCHAR(100) = '가,나,다,라,마,바,사'

IF @PSTR IS NOT NULL AND @PSTR<>''
    BEGIN
        WHILE CHARINDEX(',',@PSTR)<>0
        BEGIN
            PRINT(SUBSTRING(@PSTR,1,CHARINDEX(',',@PSTR)-1))
            SET @PSTR = SUBSTRING(@PSTR,CHARINDEX(',',@PSTR)+1,LEN(@PSTR)) 
        END
        PRINT(@PSTR)
END 

 

 

배열 변수가 여러개일때 여러개 다 DECLARE 해줘야 한다.

여기에서 아래 처럼 DECLARE 하는 변수를 INSERT 하여 특정 테이블에 넣으려고 했더니

배열의 마지막 element 가 insert가 안됐었다. (INSERT 는 WHILE 절안에....)

 

DECLARE @v_userID_LIST VARCHAR(100) = '가,나,다'
      , @v_unitID_LIST VARCHAR(200) = 'u00001,u00002,u00003'

IF @v_userID_LIST IS NOT NULL AND @v_userID_LIST<>''
    BEGIN
        WHILE CHARINDEX(',',@v_userID_LIST)<>0
        BEGIN
            INSERT INTO tb_participants 
            values ( 
                  SUBSTRING(@v_userID_LIST,1,CHARINDEX(',',@v_userID_LIST)-1) 
                 ,SUBSTRING(@v_unitID_LIST,1,CHARINDEX(',',@v_unitID_LIST)-1) 
                    )                 
            SET @v_userID_LIST = SUBSTRING(@v_userID_LIST,CHARINDEX(',',@v_userID_LIST)+1,LEN(@v_userID_LIST)) 
            SET @v_unitID_LIST = SUBSTRING(@v_unitID_LIST,CHARINDEX(',',@v_unitID_LIST)+1,LEN(@v_unitID_LIST)) 
        END
END  

문제는 콤마(,)...  마지막 element 다음에 , 가 없으니 SET 처리가 제대로 되지 않았기 때문이다.

마지막 element 다음에도 , 넣는 배열로 꼼수 부려서 처리 ㅎ

DECLARE @v_userID_LIST VARCHAR(100) = '가,나,다,'
      , @v_unitID_LIST VARCHAR(200) = 'u00001,u00002,u00003,'

 






(화상회의 예약 시스템에 적용한 내용)