MSSQL 2005 이상에서 사용 가능한 xml 문자열을 파싱하여 DB에 저장하는 방법 입니다.
* 입력받을 xml 형식의 아이템 문자열 입니다.
XML Type 1
<items> <item><id>M4A1</id><price>500</price></item> <item><id>AK47</id><price>600</price></item> <item><id>9A-91</id><price>700</price></item> <item><id>M4</id><price>700</price></item> </items> |
XML Type 2
<items> <item id="M4A1" price=500></item> <item id="AK47" price=600></item> <item id="9A-91" price=700></item> <item id="M4" price=800></item> </items> |
* SP 입니다.
CREATE proc [dbo].[sp_xml_insert] ( @i_xml Varchar(3000) ) as BEGIN DECLARE @docHandle int; --xml 문서핸들
EXEC sp_xml_preparedocument @docHandle OUTPUT, @i_xml;
INSERT INTO tbl_items (item, price) SELECT * FROM OPENXML(@docHandle,'/items/item',3) --flags 3으로 입력시 위 2가지 xml 형식에 대하여 모두 정상 변환 합니다. WITH ( id VARCHAR(30) --3이 아닐 경우 항목이 null 이 표시 됩니다. ,price BIGINT );
EXEC sp_xml_removedocument @docHandle;
END |
** OPENXML 함수 설명
https://msdn.microsoft.com/ko-kr/library/ms186918.aspx
flag: XML 데이터와 관계형 행 집합 사이에 사용해야 하는 매핑과 남는 열을 채우는 방법을 나타냅니다. flags는 선택적 입력 매개 변수이며 다음 값 중 하나일 수 있습니다.
바이트 값 | 설명 |
---|---|
0 | 기본적으로 특성 중심 매핑을 사용합니다. |
1 | 특성 중심 매핑을 사용합니다. XML_ELEMENTS와 결합할 수 있습니다. 이 경우 특성 중심 매핑이 먼저 적용된 다음 아직 처리되지 않은 모든 열에 대해 요소 중심 매핑이 적용됩니다. |
2 | 요소 중심 매핑을 사용합니다. XML_ATTRIBUTES와 결합할 수 있습니다. 이 경우 특성 중심 매핑이 먼저 적용된 다음 아직 처리되지 않은 모든 열에 대해 요소 중심 매핑이 적용됩니다. |
8 | XML_ATTRIBUTES 또는 XML_ELEMENTS와 결합(논리적 OR 연산을 수행)할 수 있습니다. 검색 상황에서 이 플래그는 소비된 데이터를 오버플로 속성인 @mp:xmltext로 복사할 수 없음을 나타냅니다. |
-
'Database & Data > MSSQL' 카테고리의 다른 글
Oracle 의 CONNECT BY LEVEL 을 MSSQL 로 변환 (0) | 2018.08.05 |
---|---|
MSSQL-연속 출석일 수 조회 쿼리 (0) | 2018.07.24 |
MSSQL 두개의 SP 간 임시테이블 공유하기 (0) | 2016.09.24 |
MSSQL dm_exec_query_stats DMV 테스트 (0) | 2016.07.05 |
MSSQL mdf 파일 만으로 DB 복원중 발생하는 오류 해결법 (2) | 2016.06.22 |