[ms-sql] Xml <--> DataTable 변환 쿼리...
옛날 꼰날... 작업하던중
XML을 통째로 DataTable에 쿼리 하려고 했던적이 있었는데...
잊어버렸다가... 지금 하는 일에 다시 적용해야 될 사항이 생겨서 찾아서 예제로 남김.
어려운거 없다...
-- 예제 결과
-- XML 데이타
<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<INFO>
<SEQ>1</SEQ>
<OLDNM>a군</OLDNM>
<NEWNM />
</INFO>
<INFO>
<SEQ>2</SEQ>
<OLDNM>b군</OLDNM>
<NEWNM />
</INFO>
<INFO>
<SEQ>3</SEQ>
<OLDNM>c군</OLDNM>
<NEWNM />
</INFO>
</ROOT>
-- 예제 소스
DECLARE @INFO TABLE
(
SEQ VARCHAR(100),
NM VARCHAR(100)
)
INSERT INTO @INFO VALUES ('1', 'a군' )
INSERT INTO @INFO VALUES ('2', 'b군' )
INSERT INTO @INFO VALUES ('3', 'c군' )
SELECT SEQ, NM as OLDNM, '' [NEWNM] FROM @INFO
DECLARE @XML XML
SET @XML = REPLACE( (SELECT SEQ, NM as OLDNM, '' [NEWNM] FROM @INFO FOR XML PATH('INFO'), ROOT ('ROOT')) , '<ROOT>' , '<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >')
SELECT @XML AS [XML]
declare @RegistXML XML
set @RegistXML = '
<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<INFO>
<SEQ>1</SEQ>
<OLDNM>a군</OLDNM>
<NEWNM>x군</NEWNM>
</INFO>
<INFO>
<SEQ>2</SEQ>
<OLDNM>b군</OLDNM>
<NEWNM>b군</NEWNM>
</INFO>
<INFO>
<SEQ>3</SEQ>
<OLDNM>c군</OLDNM>
<NEWNM></NEWNM>
</INFO>
</ROOT>'
SELECT
M.Item.query('./SEQ').value('.','VARCHAR(100)') SEQ,
M.Item.query('./OLDNM').value('.','VARCHAR(100)') [OLDNM],
M.Item.query('./NEWNM').value('.','VARCHAR(100)') [NEWNM]
FROM @RegistXML.nodes('/ROOT/INFO') AS M(ITEM)
UPDATE @INFO
SET NM = T.[NEWNM]
FROM (
SELECT
M.Item.query('./SEQ').value('.','VARCHAR(100)') SEQ,
M.Item.query('./OLDNM').value('.','VARCHAR(100)') [OLDNM],
M.Item.query('./NEWNM').value('.','VARCHAR(100)') [NEWNM]
FROM @RegistXML.nodes('/ROOT/INFO') AS M(ITEM)
) T
INNER JOIN @INFO B
ON T.SEQ = B.SEQ and T.[NEWNM] <> ''
SELECT * FROM @INFO
/* XML을TABLE로*/
--SELECT * FROM TB_BASE_USER
--WHERE USER_NM LIKE 'KCC%'
반대로 table을 다시 xml로 바꿀때
declare @xxx xml = '<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">' + ( SELECT * FROM @INFO FOR XML PATH ('INFO') ) + '</ROOT>'
select @xxx
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
[MS-SQL] 합계 쿼리. (0) | 2011.03.21 |
---|---|
[MS-SQL] CTE 로 부서 이하직원들 불러올리는 쿼리... (0) | 2011.01.05 |
[MS-SQL]쿼리에 대한 성능 비교 해보기.. (0) | 2010.11.05 |
[MS- SQL] 한방에 두개의 범위 데이타 그룹바이 걸기 (0) | 2010.11.05 |
[MS-SQL] 누적 계산에 사용한 쿼리... (0) | 2010.10.23 |