이 글 쓰고 3년이 지난 지금 아래처럼 써 본 기억이 없음..

MSSQL 에서 사용자 정의 테이블 생성하고 C#에서 Parameter로 Object 형식으로 넘기고..

 

프로시저에서는 아래처럼 받아서 사용함..

ALTER PROCEDURE [dbo].[BlahBlah]
(
  @VarTable UserDefinesTableName READONLY
)
AS

 

UserDefinesTableName--> 사용자 정의 테이블 변수 명

 


CREATE TYPE [dbo].[UserDefinesTableName] AS TABLE(
[Column1] [varchar](20) NULL,
[Column2] [varchar](10) NULL,
[Column3] [numeric](18, 3) NULL
)
GO

 

아래는 XML 방식(지금은 이렇게 안 함. 뭐가 더 좋은 방법인지는 모르겠으나 귀찮고 복잡함)

1
2
3
4
5
6
7
8
9
10
11
//C#
DataTable dtTemp = new DataTable();
dtTemp = ((DataTable)Grid1.DataSource).Copy();
DataSet dsTemp = new DataSet("NAMESPACE");
dtTemp.TableName = "TABLE";
dsTemp.Tables.Add(dtTemp);
SqlParameter s1 = new SqlParameter();
s1.Value = dsTemp.GetXml();
 
//sql parameter
cmd.Parameters.Add(new SqlParameter("@TMPTABLE", s1.Value));
cs

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
--MSSQL 프로시저에서 TEXT TYPE으로 받음
@TMPTABLE  TEXT
 
 
DECLARE @CXML XML=CAST(@TMPTABLE AS XML)     
             
--XML 컬럼 대소문자 구별 주의 
SELECT 
    XTab.value('NO[1]','INT') AS [NO],
    XTab.value('ItemCode[1]','VARCHAR(30)') AS [ITEMCODE],
    XTab.value('ItemName[1]','VARCHAR(100)') AS [ITEMNAME],
    XTab.value('LotNo[1]','VARCHAR(30)') AS [LOTNO],
    XTab.value('Qty[1]','FLOAT') AS [QTY],
    XTab.value('UnitCode[1]','VARCHAR(30)') AS [UNITCODE],
    XTab.value('TakingNo[1]','VARCHAR(50)') AS [TAKINGNO],
    XTab.value('WHCode[1]','VARCHAR(30)')  AS [WHCODE],
    XTab.value('Worker[1]','VARCHAR(30)')  AS [WORKER]
INTO #TMP
FROM @CXML.nodes('NAMESPACE/TABLE') XTab([XTab])  
  
cs
 

 

'C#' 카테고리의 다른 글

C# 정규식을 이용하여 문자열이 숫자인지 판단  (0) 2019.09.19
C# ListView 복사 붙여넣기  (0) 2019.09.19
C# Excel을 PDF  (0) 2019.09.18
C# MSSQL LEFT, RIGHT 와 동일한 함수  (0) 2018.12.22
C# Excel 업로드  (0) 2018.12.22