본문 바로가기

카테고리 없음

MSSQL 배열 형식으로 파라미터 받기

반응형

 

 

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

 

 

 

sample.sql
0.00MB