반응형
0. 현재 중소기업, 대기업 여러 프로젝트를 진행하면서 프레임워크의 사용자 정의 테이블을 파라미터로 넘기는 방법이 프레임워크에 없는 경우가 많다. (List 테이블형식으로 파라미터 넘기는 방법) 이방법을 우회할수있는 샘플 JSON을 활용하여
1. c# => datatable to json으로 변환
string json = JsonConvert.SerializeObject(table, Formatting.Indented);
2. mssql type table 만들기
/****** Object: UserDefinedTableType [dbo].[CHA026_TABLE] Script Date: 2024-06-25 오후 1:37:48 ******/
CREATE TYPE [dbo].[CHA026_TABLE] AS TABLE(
[RECI_ID] [nvarchar](200) NULL,
[PRCS_STEP_ID] [nvarchar](200) NULL,
[VER_CD] [nvarchar](200) NULL,
[BATCH_ID] [nvarchar](200) NULL,
[PRCS_SEQNO] [nvarchar](200) NULL,
[PRCS_SEQNO_DP] [nvarchar](200) NULL,
[STD_PRCS_ID] [nvarchar](200) NULL,
[LOT_TYPE] [nvarchar](200) NULL,
[COLOR_CD] [nvarchar](200) NULL,
[WORK_NM] [nvarchar](200) NULL,
[DTL_WORK_NM] [nvarchar](200) NULL,
[CTGRY] [nvarchar](200) NULL,
[JDGMNT_STND] [nvarchar](200) NULL,
[EXPRSN_TXT] [nvarchar](200) NULL,
[RSLT_TXT1] [nvarchar](200) NULL,
[WORK_SEQNO] [nvarchar](200) NULL,
[SETUP_VAL] [nvarchar](200) NULL,
[LOW_SCOP] [nvarchar](200) NULL,
[UP_SCOP] [nvarchar](200) NULL,
[LOWLMT_VAL] [nvarchar](200) NULL,
[UPLMT_VAL] [nvarchar](200) NULL,
[RSLT_TXT2] [nvarchar](200) NULL,
[RSLT_TAG_GB] [nvarchar](200) NULL,
[DEL_YN] [nvarchar](200) NULL,
[USER_ID] [nvarchar](200) NULL,
[MAKEUP_NO] [nvarchar](200) NULL,
[M_DISTANCE] [nvarchar](200) NULL,
[RSLT_TP] [nvarchar](200) NULL
)
3. 파라미터 설정
=> @CHA026_TABLE NVARCHAR(MAX)
4. 쿼리 샘플
-- JSON 데이터를 임시 테이블로 로드
DECLARE @json NVARCHAR(MAX) = N'
[
{
"RECI_ID": "111",
"PRCS_STEP_ID": "79",
"VER_CD": "111",
"BATCH_ID": "19",
"PRCS_SEQNO": "0",
"PRCS_SEQNO_DP": "0",
"STD_PRCS_ID": "1",
"LOT_TYPE": "KK",
"COLOR_CD": "00000",
"WORK_NM": "N/P",
"DTL_WORK_NM": "1-1",
"CTGRY": "F",
"JDGMNT_STND": "mm",
"EXPRSN_TXT": "P/Depth",
"RSLT_TXT1": "##0.0",
"WORK_SEQNO": "11",
"SETUP_VAL": "1.0",
"LOW_SCOP": "-11.000",
"UP_SCOP": "11.000",
"LOWLMT_VAL": "1.000",
"UPLMT_VAL": "11.000",
"RSLT_TXT2": "",
"RSLT_TAG_GB": "",
"DEL_YN": "N",
"USER_ID": "28",
"MAKEUP_NO": "",
"M_DISTANCE": "0.000",
"RSLT_TP": ""
},
{
"RECI_ID": "26",
"PRCS_STEP_ID": "111",
"VER_CD": "223",
"BATCH_ID": "2",
"PRCS_SEQNO": "0",
"PRCS_SEQNO_DP": "0",
"STD_PRCS_ID": "1",
"LOT_TYPE": "xXR",
"COLOR_CD": "00000",
"WORK_NM": "N/P",
"DTL_WORK_NM": "11-1",
"CTGRY": "F",
"JDGMNT_STND": "1mm",
"EXPRSN_TXT": "1P/Depth",
"RSLT_TXT1": "##0.0",
"WORK_SEQNO": "226",
"SETUP_VAL": "81.0",
"LOW_SCOP": "-12.000",
"UP_SCOP": "1.0300",
"LOWLMT_VAL": "93.000",
"UPLMT_VAL": "93.000",
"RSLT_TXT2": "",
"RSLT_TAG_GB": "",
"DEL_YN": "N",
"USER_ID": "28",
"MAKEUP_NO": "",
"M_DISTANCE": "0.000",
"RSLT_TP": ""
}
]';
DECLARE @CHA026_TABLE dbo.CHA026_TABLE;
INSERT INTO @CHA026_TABLE
SELECT
RECI_ID
, PRCS_STEP_ID
, VER_CD
, BATCH_ID
, PRCS_SEQNO
, PRCS_SEQNO_DP
, STD_PRCS_ID
, LOT_TYPE
, COLOR_CD
, WORK_NM
, DTL_WORK_NM
, CTGRY
, JDGMNT_STND
, EXPRSN_TXT
, RSLT_TXT1
, WORK_SEQNO
, SETUP_VAL
, LOW_SCOP
, UP_SCOP
, LOWLMT_VAL
, UPLMT_VAL
, RSLT_TXT2
, RSLT_TAG_GB
, DEL_YN
, USER_ID
, MAKEUP_NO
, M_DISTANCE
, RSLT_TP
FROM OPENJSON(@json)
WITH (
RECI_ID NVARCHAR(50)
, PRCS_STEP_ID NVARCHAR(50)
, VER_CD NVARCHAR(50)
, BATCH_ID NVARCHAR(50)
, PRCS_SEQNO NVARCHAR(50)
, PRCS_SEQNO_DP NVARCHAR(50)
, STD_PRCS_ID NVARCHAR(50)
, LOT_TYPE NVARCHAR(50)
, COLOR_CD NVARCHAR(50)
, WORK_NM NVARCHAR(50)
, DTL_WORK_NM NVARCHAR(50)
, CTGRY NVARCHAR(50)
, JDGMNT_STND NVARCHAR(50)
, EXPRSN_TXT NVARCHAR(50)
, RSLT_TXT1 NVARCHAR(50)
, WORK_SEQNO NVARCHAR(50)
, SETUP_VAL NVARCHAR(50)
, LOW_SCOP NVARCHAR(50)
, UP_SCOP NVARCHAR(50)
, LOWLMT_VAL NVARCHAR(50)
, UPLMT_VAL NVARCHAR(50)
, RSLT_TXT2 NVARCHAR(50)
, RSLT_TAG_GB NVARCHAR(50)
, DEL_YN NVARCHAR(50)
, USER_ID NVARCHAR(50)
, MAKEUP_NO NVARCHAR(50)
, M_DISTANCE NVARCHAR(50)
, RSLT_TP NVARCHAR(50)
);
-- 임시 테이블에서 데이터 선택
SELECT * FROM @CHA026_TABLE