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