2011. 12. 22. 17:04

MSSQL에서는 쿼리 결과를 xml로 출력 해주는 기능이 있습니다.

다행이 MSDN에 자세한 내용이 있으니 걱정없이 고고씽~
MSDN - RAW 모드 사용


1.기본 출력
참 간편하게 쿼리에 끝에
'For XML Raw'
만 붙이면 되죠.

그런데 쿼리를 해보면

쿼리 결과

우리가 일반적으로 보던 XML과 좀 다릅니다.
우리는 보통 아래와 같은 모양의 XML을 많이 보죠.

<?xml version="1.0" encoding="utf-8"?>
<!-- 일반적인 xml 구조 -->
<items>
  <item name="item1">
    <string>10</string>
    <Dex>10</Dex>
    <Damage>100</Damage>
  </item>
  <item name="item2">
    <string>1</string>
    <Dex>30</Dex>
    <Damage>10</Damage>
  </item>
  <item name="item3">
    <string>20</string>
    <Dex>10</Dex>
    <Damage>200</Damage>
  </item>
</items>


2.속성(attribute)을 요소(element) 바꾸기
일단 어트리뷰트로 값이 들어간것을 엘리먼트로 빼겠습니다.
일반적으로 쿼리결과는 속성값이 아니라 요소값으로 쓰기 때문입니다.
물론 아닌경우도 있죠 ㅡ.-;;
그럴땐 수작업해야 하는데 일단 이글의 끝에서 수작업 하는 법을 알려 드리겠습니다.

Elements 속성을 추가 하여 속성을 요소로 바꿀수 있습니다.




3.요소 이름 바꾸기

테이블이름을 그대로 출력하는 경우도 있겠지만 원래 DB관련 정보는 밖에서 모를수록 좋은거 아니겠습니까? ㅎㅎㅎ
여러가지 이유로 컬럼명을 다른게 표시할일이 있으니 그럴때 사용하시면 됩니다.

일반적인 쿼리에서 컬럼이름 바꾸어 출력하는 것과 동일 합니다.

 


4.로우(Row)대신 다른 이름으로 출력하기
Row로 출력되는게 싫으니 다른 이름을 출력 할수 있도록 하겠습니다.

'For XML Raw ('[지정할 이름]'), Elements'
이렇게 하면 원하는 이름으로 지정이 가능하죠.



5.프롤로그 붙이기
xml문서를 보면 프롤로그라고 해서 맨위에 문서규격같은 것을 정의 합니다.
보통
'<?xml version="1.0" encoding="utf-8"?>'
이런 식으로 붙죠.

쿼리 결과앞에 프롤로그를 붙이려면 변수를 선언해서 넣어주면 됩니다-_-;
따로 옵션이 제공되는것 같지는 안는것 같습니다.

Declare @strCode VarChar(1024)

set @strCode = '<?xml version="1.0" encoding="utf-8"?>'
set @strCode = @strCode +
 (Select  strData1 as String
		, strData2 as [Dex]
		, strData1 as [Damage]
From tb_WebServiceTest

--xml로 출력
FOR XML RAW ('Item'), ELEMENTS
)

select @strCode

결과


이런방식으로 원하는 다양한 모양의 xml로 출력이 가능합니다.