[Sql Server] 배열 변수 사용 예
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,'
(화상회의 예약 시스템에 적용한 내용)