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

   

참고 링크

   

이점

  • 클라이언트의 데이터를 처음 채울 때 잠글 필요가 없습니다.
  • 간단한 프로그래밍 모델을 제공합니다.
  • 단일 루틴에 복잡한 비즈니스 논리를 포함할 수 있습니다.
  • 서버 왕복을 줄입니다.
  • 카디널리티가 다른 테이블 구조를 가질 수 있습니다.
  • 강력한 형식입니다.
  • 클라이언트가 정렬 순서 및 고유 키를 지정할 수 있습니다.

   

제한

  • 열에 대한 통계가 유지 관리 되지 않는다.
  • 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