내용 보기

작성자

관리자 (IP : 172.17.0.1)

날짜

2020-07-09 04:53

제목

[MSSQL] SP에 테이블 파라메터 설정하기


제일 먼저 사용자 정의 테이블 형식을 생성해 주어야 한다.


1. 사용자 정의 테이블 형식 생성
CREATE TYPE dbo.LDAPUserInfoTableType AS TABLE
(
    UserID nvarchar(50) NOT NULL,
    MobilePhone nvarchar(20),
    Email nvarchar(50),
    Department nvarchar(100),
    UserName nvarchar(100)
);

그리곤 프로시저를 다음과 같이 생성하다.

2. 프로시저 생성
CREATE PROCEDURE dbo.SP_SetData_ControlManager_LDAPUserInfoSync
@LDAPUserInfoTable dbo.LDAPUserInfoTableType READONLY
AS
BEGIN
SELECT * FROM @LDAPUserInfoTable
END

3. 사용하기
DECLARE @User LDAPUserInfoTableType
INSERT INTO @User(UserIDMobilePhoneEmailDepartmentUserNameVALUES ('Test','2','2','2','2'),
             ('Test2','2','2','2','2')

EXECUTE SP_SetData_ControlManager_LDAPUserInfoSync @User

위 처럼 LDAPUserInfoTableType 타입의 @User라는 변수를 선언하고
해당 @User 테이블에 값을 추가한 후 프로시저 파라메터로 넘겨주면 된다.


C#에서 프로시저 호출 방법
 
DataTable dataTable = new DataTable("SampleDataType"); 
//we create column names as per the type in DB
dataTable.Columns.Add("SampleString", typeof(string));
dataTable.Columns.Add("SampleInt", typeof(Int32));
//and fill in some values
dataTable.Rows.Add("99", 99);
dataTable.Rows.Add("98", null);
dataTable.Rows.Add("97", 99);
 
SqlDbType을  Structured로 해주어야 한다.
 
SqlParameter parameter = new SqlParameter(); 
//The parameter for the SP must be of SqlDbType.Structured
parameter.ParameterName="@Sample";
parameter.SqlDbType = System.Data.SqlDbType.Structured;
parameter.Value = dataTable;
command.Parameters.Add(parameter);

출처1

출처2