본문 바로가기

프로그래밍/DB

STUFF 와 FOR XML PATH 테스트 !

 STUFF 와 FOR XML PATH  테스트 !

CREATE TABLE #TABLE1 (T1_ID INT)

CREATE TABLE #TABLE2 (T2_ID INT, T1_ID INT)


INSERT INTO #TABLE1 VALUES(1) -- 테이블 생성
INSERT INTO #TABLE1 VALUES(2)

INSERT INTO #TABLE2 VALUES(1, 1) -- 테이블 값 생성
INSERT INTO #TABLE2 VALUES(2, 1)
INSERT INTO #TABLE2 VALUES(3, 1)
INSERT INTO #TABLE2 VALUES(4, 2)
INSERT INTO #TABLE2 VALUES(5, 2)
INSERT INTO #TABLE2 VALUES(6, 2)

 


SELECT * FROM #TABLE1 -- 테스트 준비 완료
SELECT * FROM #TABLE2

 


테스트 시작 - TABLE2의 데이터를 한 ROW로 나타냄 : 결과

 

 SELECT  T3.T1_ID,
 STUFF(
(
SELECT ',' + CAST(T2.T2_ID AS CHAR)
FROM #TABLE1 AS T1 
        INNER JOIN #TABLE2 AS T2 ON T1.T1_ID = T2.T1_ID  
WHERE T1.T1_ID = T3.T1_ID
GROUP BY T2.T2_ID, T2.T1_ID
ORDER BY T2.T1_ID
FOR XML PATH('') 
)
 , 1, 1, '') AS T2_ID
 FROM #TABLE1 AS T3
 WHERE T3.T1_ID IN (1,2)
 GROUP BY T3.T1_ID

 

 


STUFF 제거 : 앞에 , 살아남

 

 

 SELECT T3.T1_ID,
 --STUFF(
 (
SELECT ',' + CAST(T2.T2_ID AS CHAR)
FROM #TABLE1 AS T1 
        INNER JOIN #TABLE2 AS T2 ON T1.T1_ID = T2.T1_ID  
WHERE T1.T1_ID = T3.T1_ID
GROUP BY T2.T2_ID, T2.T1_ID
ORDER BY T2.T1_ID
FOR XML PATH('')
) AS T2_ID 
 --  , 1, 1, '') AS T2_ID
 FROM #TABLE1 AS T3
 WHERE T3.T1_ID IN (1,2)
 GROUP BY T3.T1_ID

 

 


 

 실제 여러 ROW의 데이터를 ,로 구분하는 역할은 FOR XML PATH('') 가 수행한다.

안의 SELECT 쿼리 테스트 결과 

 

 SELECT ',' + CAST(T2.T2_ID AS VARCHAR) AS T2_ID
 FROM #TABLE1 AS T1
 INNER JOIN #TABLE2 AS T2 ON T1.T1_ID = T2.T1_ID 
 --WHERE T1.T1_ID = T3.T1_ID
 GROUP BY T2.T2_ID, T2.T1_ID
 ORDER BY T2.T1_ID

 

 

 

 


 SELECT ',' + CAST(T2.T2_ID AS VARCHAR)
 FROM #TABLE1 AS T1 
 INNER JOIN #TABLE2 AS T2 ON T1.T1_ID = T2.T1_ID
 --WHERE T1.T1_ID = T3.T1_ID
 GROUP BY T2.T2_ID, T2.T1_ID
 ORDER BY T2.T1_ID
 FOR XML PATH('')

 



 

 

 

 SELECT ',' + CAST(T2.T2_ID AS VARCHAR)  AS TAG
 FROM #TABLE1 AS T1 
 INNER JOIN #TABLE2 AS T2 ON T1.T1_ID = T2.T1_ID 
 --WHERE T1.T1_ID = T3.T1_ID
 GROUP BY T2.T2_ID, T2.T1_ID
 ORDER BY T2.T1_ID
 FOR XML PATH('')

 


- STUFF

STUFF(문자열, 시작위치, 변경할 문자길이, 변경할 문자)

EX) STUFF('ABCDEF', 2, 2 , 'abc') => 'AabcDEF'
두번째부터 시작하여, 2 길이의 문자를 abc로 변경

 

'프로그래밍 > DB' 카테고리의 다른 글

컬럼 수정  (0) 2013.12.06
MSSQL 문자열 합치기  (0) 2013.10.24
순위  (0) 2013.09.12
프로시저  (0) 2013.09.06
JOIN  (0) 2013.09.03