이전 행의 저장하기 (스크립트 변환 이용)

 

 

한대성

MS SQL Server MVP

에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자

 





 Question
데이터를 가공할때 바로 전데이터의 정보를 이용해 값을 만들려고 합니다.
  1  A  50 
  2  B  100
위와 같은 데이터가 있다면
  1  A  50   0 
  2  B  100  50
과 같이 바로 전 데이터의 정보를 입력하고자 합니다.(B에서 A의 50을 기록하는 방식)
script에서 변수를 이용해 전 정보를 기록하고 다음 정보를 변수에 넣는 방법으로 했으나
실행하면 run time error로 변수에 input/write가 막혀있다는 메시지가 나옵니다.
데이터를 위와 같이 가공할 방법이 있나요?
 

다음과 같이 데이터 흐름 내에서 간단한 쿼리로 원본을 설정합니다.

SELECT 1 as Seq, 'A' as Col, 50 as Val

UNION ALL SELECT 2, 'B', 65

UNION ALL SELECT 3, 'B', 70

UNION ALL SELECT 4, 'B', 75

UNION ALL SELECT 5, 'B', 80

UNION ALL SELECT 6, 'B', 85

UNION ALL SELECT 7, 'B', 90

UNION ALL SELECT 8, 'B', 95

UNION ALL SELECT 9, 'B', 100

UNION ALL SELECT 10, 'B', 105

 

그런 다음, 스크립트 변환을 원본과 연결합니다.

 

스크립트 구성 요소를 열어서 아래와 같이 입력 스크립트 변환에서 이용할 열을 선택합니다.

 

/출력 탭에서 아래와 같이 출력 부분에 새로운 열을 추가합니다. 예제에서는 prevVal이라 하겠습니다.


 

이제 스크립트 편집기(VSA) , 아래와 같은 스크립트를 입력합니다.

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper

Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

 

Public Class ScriptMain

    Inherits UserComponent

 

 

    Dim prevVal As Integer

 

 

    Public Overrides Sub 입력0_ProcessInputRow(ByVal Row As 입력0Buffer)

 

        Row.prevVal = prevVal

        prevVal = Row.Val

 

        '너무 썰렁한가요?? . ,.

 

    End Sub

 

    Public Sub New()

        prevVal = 0

 

    End Sub

End Class

 

 

 

스크립트 편집기를 닫고선 임의의 변환을 붙여서 데이터를 확인해 봅시다.

(데이터 뷰어를 통해서 가능합니다.)



+ Recent posts