Table-valued parameter를 이용해서 배치성 잡이나 구분된 string으로 변수값을 효과적으로 이용하는 방법을 알아보도록 하겠습니다. table-valued parameter는 SQL 2008 이후 부터 가능합니다.
ODBC C++ Sample http://msdn.microsoft.com/en-us/library/ff878030.aspx
OLE C++ Sample code http://technet.microsoft.com/en-us/library/ff877933.aspx
참고 링크
- http://www.codeproject.com/Articles/39161/C-and-Table-Value-Parameters
- http://msdn.microsoft.com/en-us/library/bb510489.aspx
- http://sqlcat.com/sqlcat/b/technicalnotes/archive/2013/06/13/maximizing-throughput-with-tvps.aspx
이점
- 클라이언트의 데이터를 처음 채울 때 잠글 필요가 없습니다.
- 간단한 프로그래밍 모델을 제공합니다.
- 단일 루틴에 복잡한 비즈니스 논리를 포함할 수 있습니다.
- 서버 왕복을 줄입니다.
- 카디널리티가 다른 테이블 구조를 가질 수 있습니다.
- 강력한 형식입니다.
- 클라이언트가 정렬 순서 및 고유 키를 지정할 수 있습니다.
제한
- 열에 대한 통계가 유지 관리 되지 않는다.
- Readonly 매개 변수로 전달되어야 하며, 데이터에 대해서 UPDATE/DELETE/INSERT 작업은 불가능하다.
- SELECT INTO 또는 INSERT EXEC 사용 불가능.
Table-Valued 파라메터로 사용할 수 있는 것들~
- string으로 콤마 구분으로해서 문자열로 넘기는 작업 전환
- 로그 형태의 배치성 데이터 INSERT 작업
기존 나의 SQL 코드들을 보자.
CREATE PROCEDURE dbo.USB_B @pArrayString varchar(max) -- 여러 아이템 삭제하기 ( 아이템 시리얼 번호를 콤마 구분) AS SET NOCOUNT ON;
DELETE [dbo].[TBLX] WHERE [number] IN ( SELECT CONVERT(INT, string) AS [number] FROM [dbo].[UfnSplit] ( @pArrayString, ',') ) GO |
Table-Valued 매개변수 SQL 코드
c# Test Code
주의) 효과적으로 사용하려면 매개변수는 1000개 미만의 행을 삽입 할 때 효과적이다.
실행 결과
엄청 간단하죠? 성능 테스트한 자료(이곳)인데~ 테스트 방법에 차이가 있긴 하지만^^ 확실히 엄청난 속도 차이네요~
'SQLTAG Daily Links' 카테고리의 다른 글
2013.06.27 (0) | 2013.06.27 |
---|---|
2013.06.26 (0) | 2013.06.26 |
2013.06.25 (0) | 2013.06.25 |
2013.06.24 (0) | 2013.06.24 |
2013.06.21 (0) | 2013.06.21 |