반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- vue3
- MSSQL 동적 쿼리
- Visual Studio 2015 강제 삭제
- 리버스 프록시 예제
- spring
- Visual Studio 2015 삭제
- Visual Studio 패키지에 실패했습니다.
- tomcat
- javascript
- 업무 자동화
- Visual Studio 재설치
- vue
- Vue configureWebpack
- SQLP
- Selenium 설치
- 프록시 예제
- Nginx Reverse Proxy
- Visual Studio 강제 삭제
- 디자인 패턴 사례
- Tomcat Error
- .NET Core Proxy
- Visual Studio 2015 설치
- 웹 크롤링
- 웹 자동화
- MSSQL 문자열
- Selenium 환경
- vue.js
- .NET Core
- Vue3 configureWebpack
- Vue.config
Archives
- Today
- Total
금백조의 개발 블로그
[MSSQL]FOR XML PATH 사용시CHAR(13) 문자열이 
 로 바뀌는 현상 해결 방법 본문
Database/SQL Server(MSSQL)
[MSSQL]FOR XML PATH 사용시CHAR(13) 문자열이 
 로 바뀌는 현상 해결 방법
금백조 2021. 10. 25. 23:05반응형
서론
FOR XML PATH와 STUFF를 이용하여 행 문자열들을 하나의 문자로 합치고 각 문자 사이에 개행 문자를 추가하려는 중 개행 문자 일부인 CHAR(13) 문자열이 
문자열로 변환되는 현상이 나타났습니다. 이를 문자열 치환을 통해 해결한 방법을 소개하려 합니다.
실행환경
- MSSQL 13.0 - CHAR(13) 문자열이 
로 바뀌는 현상 발생
- MSSQL 15.0 - CHAR(13) 문자열이 
로 바뀌는 현상 발생하지 않음. 정상 작동 확인
본론
[상황]
- FOR XML PATH, STUFF를 이용하여 문자열 합치기를 수행 중 CHAR(13) 문자열이 문자열로 변환됨.
SELECT STUFF((SELECT ',' + EMP_NO+'('+EMP_NM+')'
FROM(
SELECT 'E0001' EMP_NO, 'ALICE' EMP_NM
UNION ALL
SELECT 'E0002' EMP_NO, 'BOB' EMP_NM
UNION ALL
SELECT 'E0003' EMP_NO, 'SAM' EMP_NM
UNION ALL
SELECT 'E0004' EMP_NO, 'TOM' EMP_NM
UNION ALL
SELECT 'E0005' EMP_NO, 'SWAN' EMP_NM
)EMP
FOR XML PATH('')),1,1,'') AS EMP_LIST
[문제]
- CHAR(13) 문자열이 로 바뀌는 현상
SELECT CHAR(13)+ CHAR(10) + EMP_NO+'('+EMP_NM+')'--개행 : CHAR(13)+ CHAR(10)
FROM(
SELECT 'E0001' EMP_NO, 'ALICE' EMP_NM
UNION ALL
SELECT 'E0002' EMP_NO, 'BOB' EMP_NM
UNION ALL
SELECT 'E0003' EMP_NO, 'SAM' EMP_NM
UNION ALL
SELECT 'E0004' EMP_NO, 'TOM' EMP_NM
UNION ALL
SELECT 'E0005' EMP_NO, 'SWAN' EMP_NM
)EMP
FOR XML PATH('')
[해결책]
- CHAR(13) 문자열을 #CHAR13#로 치환 후 FOR XML PATH가 끝나면 REPLACE 함수를 통해 #CHAR13#을 CHAR(13) 문자열로 다시 바꿔준다.
SELECT STUFF(REPLACE(
(SELECT '#CHAR13#' + CHAR(10) + EMP_NO+'('+EMP_NM+')'
FROM(
SELECT 'E0001' EMP_NO, 'ALICE' EMP_NM
UNION ALL
SELECT 'E0002' EMP_NO, 'BOB' EMP_NM
UNION ALL
SELECT 'E0003' EMP_NO, 'SAM' EMP_NM
UNION ALL
SELECT 'E0004' EMP_NO, 'TOM' EMP_NM
UNION ALL
SELECT 'E0005' EMP_NO, 'SWAN' EMP_NM
)EMP
FOR XML PATH('')),'#CHAR13#', CHAR(13)),1,2,'') EMP_LIST
결론
SQL Server 버전이 비교적 오래된 버전일 경우 FOR XML PATH 사용 시 CHAR(13) 문자열이 
 로 바뀌는 현상이 발생할 수 있는 것 같습니다. 따라서 위와 같은 현상이 발생할 경우 문자열 치환을 통해 해결하시면 되겠습니다.
Reference
Microsoft Docs - STUFF(Transact-SQL)
https://docs.microsoft.com/ko-kr/sql/t-sql/functions/stuff-transact-sql?view=sql-server-ver15
반응형
'Database > SQL Server(MSSQL)' 카테고리의 다른 글
[MSSQL]저장 프로시저 장단점, 사용 예제 정리 (0) | 2022.05.03 |
---|---|
[MSSQL]집계함수(Aggregate Function)를 이용하여 특정 값(0...)을 제외, NULL을 포함하고 집계하기 (0) | 2021.12.22 |
[MSSQL]FULL OUTER JOIN 개념 및 예제(FULL JOIN 합집합) (0) | 2021.07.17 |
[MSSQL]분석 함수 개념 및 예제(윈도우 함수) (0) | 2021.07.09 |
[MSSQL]LAG, LEAD 함수를 이용한 이전행, 다음행 조회 방법 (0) | 2021.06.20 |