반응형
/********************************************************************************************
-- Title : [2k5] 프로시저에 테이블을 변수처럼 넣어 일괄 저장하기
-- Reference : bol
-- Key word : 테이블 변수, sp_xml_preparedocument, sp_xml_removedocument, xml
********************************************************************************************/
-- 프로시저 파라미터로 테이블 변수를 쓸 수 있나?
-- 내 짧은 지식으로는 못하는거 같당.. 다른 팁이 있었나 ㅡ,.ㅡ??
-- 우얏든, 결국 xml로 던져서 xml로 일괄 저장하장...

/*
-- 프로시저 작성
*/
CREATE PROCEDURE dbo.up_ttt
    @membr_cd INT
  , @xml_doc NVARCHAR(1000)
AS
SET NOCOUNT ON;
SET XACT_ABORT ON;

BEGIN TRY
BEGIN TRAN
/********* Start Point of Query String *********/
    -- 신규 membr_cd 관련 항목 데이터 추가
    DECLARE @xml_handle INT;

    EXEC sp_xml_preparedocument @xml_handle OUTPUT, @xml_doc;
    INSERT INTO sch_xset.list_set (membr_cd, list_seq, sort_ord)
    SELECT @membr_cd "membr_cd", list_seq, sort_ord
    FROM OPENXML (@xml_handle, '/root/list_set_tbl', 0)
    WITH ( list_seq  INT
         , sort_ord TINYINT
         );
        
    EXEC sp_xml_removedocument @xml_handle;
/********* End Point of Query String *********/  
COMMIT TRAN
END TRY
BEGIN CATCH
    IF (XACT_STATE() <> 0)
       ROLLBACK TRAN;
END CATCH;
GO
/*
-- 프로시저 호출
*/
DECLARE @XmlDoc nvarchar(1000)
SET @XmlDoc = N'
<root>
  <list_set_tbl list_seq="5" sort_ord="1"/>
  <list_set_tbl list_seq="4" sort_ord="2"/>
</root>';

EXEC up_ttt 999, @XmlDoc;
반응형

+ Recent posts