반응형

예제 이므로 밑에 데이터를 선언해서 사용했지만. 원래는 CS 단에서 노란부분 처럼 XML로 만들어서 던졌어요.

EXEC USP_SWS_SAVE_INSERT

'<LIST><ROW><SEQ>1</SEQ><MUID>AAA</MUID></ROW><ROW><SEQ>2</SEQ><MUID>BBB</MUID></ROW></LIST>',

null, null

ALTER PROCEDURE USP_SAVE_INSERT
@P_XMLDATA VARCHAR(MAX), -- DETAIL XML DATA
@P_RTN_CODE VARCHAR(4) OUTPUT,
@P_RTN_MSG VARCHAR(2000) OUTPUT


예제

DECLARE @XML_DATA VARCHAR(MAX) -- XML DATA
DECLARE @XML_RTN INT -- XML 핸들 번호 RETURN
SET @XML_DATA = '<LIST><ROW><SEQ>1</SEQ><ID>AAA</ID></ROW><ROW><SEQ>2</SEQ><ID>BBB</ID></ROW></LIST>'


-- XML을 담을 임시 테이블을 선언해줍미다.
CREATE TABLE #TEMP_XML
(
SEQ INT,
ID VARCHAR(20)
)

-- XML 문서의 새로 생성된 내부 표현에 액세스하는 데 사용할 수 있는 핸들을 받습니다.
EXEC sp_xml_preparedocument @XML_RTN OUTPUT, @XML_DATA

INSERT INTO #TEMP_XML
SELECT *
FROM OPENXML (@XML_RTN, '/LIST/ROW', 3)
WITH
(
SEQ INT,
ID VARCHAR(20)
)

-- 아까 생성된 XML 핸들을 제거합니다.
EXEC sp_xml_removedocument @XML_RTN

SELECT * FROM #TEMP_XML




이제 임시 테이블에 넣은 데이터를 기준으로 아래에 기능을 더 추가하면 되겠지요?

아래는 위의 예제를 직접 실행해본겁미다~.



오후.. 5시쯤...혼자 열라 해메던 문제......

XML 데이타 필드 안에 한글이 들어있을 경우 위와 같이 했다간 에러가 발생하더군요.

XML 을 받는 변수의 속성을 VARCHAR(MAX)가 아닌 NVARCHAR(MAX) 하여야 됩니다.

아무래도 NVARCHAR는 유니코드/다국어지원이 되기 때문인거 같은데.. 걍 VARCHAR에도 한글은 들어가 지는뎁...

반응형

+ Recent posts