스크립트 구성 요소 편집기에서 스크립트 구성 요소 구성
스크립트 구성 요소에서 사용자 지정 코드를 작성하려면 먼저 만들려는 데이터 흐름 구성 요소의 유형(원본, 변환 또는 대상)을 선택한 다음 스크립트 변환 편집기에서 구성 요소의 메타데이터 및 속성을 구성해야 합니다.
만들 구성 요소 유형 선택
SSIS 디자이너의 데이터 흐름 창에 스크립트 구성 요소를 추가하면 스크립트 구성 요소 유형 선택 대화 상자가 나타납니다. 이 대화 상자에서 구성 요소를 원본, 변환 또는 대상으로 미리 구성합니다. 이 초기 옵션을 선택한 후에는 스크립트 변환 편집기에서 구성 요소를 계속 구성할 수 있습니다.
스크립트 구성 요소에 대한 기본 스크립트 언어를 설정하려면 옵션 대화 상자의 일반 페이지에서 스크립트 언어 옵션을 사용합니다. 자세한 내용은 일반 페이지를 참조하십시오.
두 가지 디자인 타임 모드 이해
SSIS 디자이너에서 스크립트 구성 요소에 대해 사용하는 모드로는 메타데이터 디자인 모드와 코드 디자인 모드의 두 가지가 있습니다.
스크립트 변환 편집기를 열면 구성 요소가 메타데이터 디자인 모드로 전환됩니다. 이 모드에서는 입력 열을 선택하고 출력 및 출력 열을 추가하거나 구성할 수 있지만 코드를 작성할 수는 없습니다. 구성 요소의 메타데이터를 구성한 후에 코드 디자인 모드로 전환하여 스크립트를 작성할 수 있습니다.
스크립트 편집을 클릭하여 코드 디자인 모드로 전환하면 스크립트 구성 요소에서는 추가 변경을 수행할 수 없도록 메타데이터를 잠근 다음 입력 및 출력의 메타데이터에서 기본 코드를 자동으로 생성합니다. 이 자동 생성 코드가 완성된 후 사용자 지정 코드를 입력할 수 있습니다. 코드에서는 자동으로 생성된 기본 클래스를 사용하여 입력 행을 처리하고, 버퍼와 버퍼의 열에 액세스하고, 패키지에서 연결 관리자와 변수를 모두 강력한 형식의 개체로 검색할 수 있습니다.
코드 디자인 모드에서 사용자 지정 코드를 입력한 후에는 메타데이터 디자인 모드로 다시 전환할 수 있습니다. 메타데이터 디자인 모드로 전환해도 입력한 코드는 삭제되지 않지만 메타데이터를 추가로 변경하면 기본 클래스가 다시 생성됩니다. 메타데이터 변경으로 인해 사용자 지정 코드에서 참조하는 개체가 더 이상 존재하지 않거나 수정된 경우에는 이후 구성 요소의 유효성 검사에 실패할 수 있습니다. 이 경우 다시 생성된 기본 클래스에 대해 성공적으로 컴파일할 수 있도록 코드를 수동으로 수정해야 합니다.
메타데이터 디자인 모드에서 구성 요소 구성
메타데이터 디자인 모드에서는 입력 열을 선택하고 출력과 출력 열을 추가 및 구성할 수 있지만 코드를 작성할 수는 없습니다. 구성 요소의 메타데이터를 구성한 후에 코드 디자인 모드로 전환하여 스크립트를 작성해야 합니다.
사용자 지정 편집기에서 구성해야 하는 속성은 스크립트 구성 요소의 사용 방식에 따라 달라집니다. 스크립트 구성 요소는 원본, 변환 또는 대상으로 구성될 수 있으며, 구성 요소의 사용 방법에 따라 입력이나 출력 또는 모두를 지원합니다. 작성하는 사용자 지정 코드에서는 입력 및 출력 행과 열을 처리합니다.
스크립트 변환 편집기의 입력 열 페이지
스크립트 변환 편집기의 입력 열 페이지는 변환과 대상에 대해 표시되고 원본에 대해서는 표시되지 않습니다. 이 페이지에서 사용자 지정 스크립트에서 사용할 사용 가능한 입력 열을 선택하고 해당 열에 대한 읽기 전용 또는 읽기/쓰기 권한을 지정합니다.
이 메타데이터를 기반으로 생성되는 코드 프로젝트에서 BufferWrapper 프로젝트 항목에는 각 입력에 대한 클래스가 포함되며 이 클래스에는 선택한 각 입력 열에 대한 형식화된 접근자 속성이 포함됩니다. 예를 들어 CustomerInput이라는 입력에서 정수 CustomerID 열과 문자열 CustomerName 열을 선택할 경우 BufferWrapper 프로젝트 항목에는 ScriptBuffer에서 파생된 CustomerInput 클래스가 포함되며 이 CustomerInput 클래스는 CustomerID라는 정수 속성과 CustomerName이라는 문자열 속성을 제공합니다. 이 규칙을 통해 다음과 같이 형식 검사를 사용하는 코드를 작성할 수 있습니다.
Dim currentCustomerID as Integer = CustomerInput.CustomerID
Dim currentCustomerName as String = CustomerInput.CustomerName
특정 유형의 데이터 흐름 구성 요소에 대한 입력 열을 구성하는 방법은 특정 유형의 스크립트 구성 요소 개발의 해당 예를 참조하십시오.
스크립트 변환 편집기의 입/출력 페이지
스크립트 변환 편집기의 입/출력 페이지는 원본, 변환 및 대상에 대해 표시됩니다. 이 페이지에서는 사용자 지정 스크립트에서 사용할 입력, 출력 및 출력 열을 추가하고 제거하고 구성할 수 있습니다. 단 다음과 같은 제한 사항이 있습니다.
원본으로 사용되는 스크립트 구성 요소는 입력을 사용하지 않으며 여러 출력을 지원합니다.
변환으로 사용되는 스크립트 구성 요소는 하나의 입력과 여러 출력을 지원합니다.
대상으로 사용되는 스크립트 구성 요소는 하나의 입력을 지원하며 출력은 사용하지 않습니다.
이 메타데이터를 기반으로 생성되는 코드 프로젝트에서 BufferWrapper 프로젝트 항목에는 각 입력 및 출력에 대한 클래스가 포함됩니다. 예를 들어 CustomerOutput이라는 출력을 만들 경우 BufferWrapper 프로젝트 항목에는 ScriptBuffer에서 파생된 CustomerOutput 클래스가 포함되며 이 CustomerOutput 클래스에는 만들어진 각 출력 열에 대한 형식화된 접근자 속성이 포함됩니다.
입/출력 페이지에서만 출력 열을 구성할 수 있습니다. 입력 열 페이지에서는 변환 및 대상에 대한 입력 열을 선택할 수 있습니다. BufferWrapper 프로젝트 항목에 만들어진 형식화된 접근자 속성은 출력 열에 대한 쓰기 전용 속성이 됩니다. 입력 열의 접근자 속성은 입력 열 페이지에서 각 열에 대해 선택한 사용 유형에 따라 읽기 전용 또는 읽기/쓰기 속성이 됩니다.
특정 유형의 데이터 흐름 구성 요소에 대한 입력 및 출력을 구성하는 방법은 특정 유형의 스크립트 구성 요소 개발의 해당 예를 참조하십시오.
[!참고]
오류 행의 자동 처리를 위해 스크립트 구성 요소의 출력을 오류 출력으로 직접 구성할 수는 없지만 적절할 때 추가 출력을 만들고 스크립트를 사용하여 행을 이 출력으로 전송하는 방식으로 오류 출력의 기능을 재현할 수 있습니다. 자세한 내용은 스크립트 구성 요소의 오류 출력 시뮬레이션을 참조하십시오.
출력의 ExclusionGroup 및 SynchronousInputID 속성
ExclusionGroup 속성 값은 동기 출력을 사용하는 변환에서만 0이 아니며, 이러한 변환에서 코드는 필터링 또는 분기를 수행하고 0이 아닌 동일한 ExclusionGroup 값을 공유하는 출력 중 하나로 각 행을 전송합니다. 예를 들어 변환에서는 행을 기본 출력이나 오류 출력 중 하나로 전송할 수 있습니다. 이 경우 추가 출력을 만들 때는 SynchronousInputID 속성의 값을 구성 요소의 입력에 대한 ID와 일치하는 정수로 설정해야 합니다.
SynchronousInputID 속성 값은 동기 출력을 사용하는 변환에서만 0이 아닙니다. 이 속성 값이 0이면 해당 출력이 비동기적임을 나타냅니다. 행이 선택한 출력으로 전달되며 이때 새 행이 추가되지는 않는 동기 출력의 경우 이 속성에는 구성 요소의 입력에 대한 ID가 들어 있어야 합니다.
[!참고]
스크립트 변환 편집기에서는 첫 번째 출력을 만들 때 출력의 SynchronousInputID 속성을 구성 요소의 입력에 대한 ID로 설정합니다. 그러나 이후 출력을 만들 때는 이러한 출력의 SynchronousInputID 속성을 0으로 설정합니다.
동기 출력을 사용하는 구성 요소를 만드는 경우 각 출력의 SynchronousInputID 속성은 구성 요소의 입력에 대한 ID로 설정되어야 합니다. 따라서 편집기에서 첫 번째 출력 이후에 만든 각 출력의 SynchronousInputID 값은 0에서 구성 요소의 입력에 대한 ID로 변경되어야 합니다.
비동기 출력을 사용하는 구성 요소를 만드는 경우 각 출력의 SynchronousInputID 속성은 0으로 설정되어야 합니다. 따라서 첫 번째 출력의 SynchronousInputID 값은 구성 요소의 입력에 대한 ID에서 0으로 변경되어야 합니다.
스크립트 구성 요소에서 행을 두 개의 동기 출력 중 하나로 전송하는 예는 스크립트 구성 요소를 사용하여 동기 변환 만들기를 참조하십시오.
생성된 스크립트의 개체 이름
스크립트 구성 요소에서는 입력 및 출력의 이름을 구문 분석하고, 입력 및 출력의 열 이름을 구문 분석하며, 이러한 이름을 기반으로 BufferWrapper 프로젝트 항목에 클래스 및 속성을 생성합니다. 찾은 이름에 유니코드 범주 UppercaseLetter, LowercaseLetter, TitlecaseLetter, ModifierLetter, OtherLetter 또는 DecimalDigitLetter에 속하지 않는 문자가 포함된 경우 유효하지 않은 문자는 생성되는 이름에서 삭제됩니다. 예를 들어 공백은 삭제되므로 이름이 FirstName 및 [First Name]인 두 개의 입력 열은 모두 FirstName이라는 열 이름을 갖는 것으로 해석되므로 예기치 않은 결과가 발생합니다. 이러한 문제가 발생하지 않도록 하려면 스크립트 구성 요소에서 사용하는 입력 및 출력의 이름과 입력 및 출력 열의 이름에는 이 섹션에 나열된 유니코드 범주의 문자만 사용해야 합니다.
스크립트 변환 편집기의 스크립트 페이지
스크립트 태스크 편집기의 스크립트 페이지에서는 스크립트 태스크의 고유한 이름과 설명을 지정합니다. 다음 속성의 값을 지정할 수도 있습니다.
[!참고]
SQL Server 2008 Integration Services(SSIS)와 그 이후 버전에서는 모든 스크립트가 미리 컴파일됩니다. 이전 버전에서는 개발자가 태스크의 Precompile 속성을 설정하여 스크립트가 미리 컴파일되었는지 여부를 지정했습니다.
ValidateExternalMetadata 속성
ValidateExternalMetadata 속성의 부울 값은 구성 요소에서 디자인 타임에 외부 데이터 원본에 대한 유효성 검사를 수행해야 하는지 아니면 런타임까지 유효성 검사를 연기해야 하는지를 지정합니다. 기본적으로 이 속성의 값은 True입니다. 즉, 디자인 타임과 런타임 모두에 외부 메타데이터의 유효성이 검사됩니다. 디자인 타임에 외부 데이터 원본을 사용할 수 없는 경우 이 속성의 값을 False로 설정할 수 있습니다. 예를 들어 패키지가 원본을 다운로드하거나 런타임에만 대상을 만드는 경우가 이러한 경우에 해당합니다.
ReadOnlyVariables 및 ReadWriteVariables 속성
쉼표로 구분된 기존 변수 목록을 이러한 속성의 값으로 입력하여 스크립트 구성 요소 코드 내에서 해당 변수를 읽기 전용 또는 읽기/쓰기 권한으로 액세스할 수 있게 할 수 있습니다. 변수는 코드에서 자동으로 생성된 기본 클래스의 ReadOnlyVariables 및 ReadWriteVariables 속성을 통해 액세스할 수 있습니다. 자세한 내용은 스크립트 구성 요소에서 변수 사용을 참조하십시오.
[!참고]
변수 이름은 대/소문자를 구분합니다.
ScriptLanguage
스크립트 구성 요소에 대한 프로그래밍 언어로 Microsoft Visual Basic 또는 Microsoft Visual C#을 선택할 수 있습니다.
스크립트 편집 단추
스크립트 편집 단추를 클릭하면 사용자 지정 스크립트를 작성할 수 있는 Microsoft VSTA(Visual Studio Tools for Applications) IDE 가 열립니다. 자세한 내용은 스크립트 구성 요소 코딩 및 디버깅을 참조하십시오.
스크립트 변환 편집기의 연결 관리자 페이지
스크립트 변환 편집기의 연결 관리자 페이지에서는 사용자 지정 스크립트에 사용할 연결 관리자를 추가하거나 제거합니다. 일반적으로 원본 또는 대상 구성 요소를 만들 때는 연결 관리자를 참조해야 합니다.
이 메타데이터를 기반으로 생성되는 코드 프로젝트에서 ComponentWrapper 프로젝트 항목에는 선택된 각 연결 관리자에 대한 형식화된 접근자 속성이 있는 Connections 컬렉션 클래스가 포함됩니다. 형식화된 각 접근자 속성은 연결 관리자와 동일한 이름을 가지며 연결 관리자에 대한 참조를 IDTSConnectionManager100의 인스턴스로 반환합니다. 예를 들어 편집기의 연결 관리자 페이지에서 MyADONETConnection이라는 연결 관리자를 추가한 경우 스크립트에서 다음 코드를 사용하여 해당 연결 관리자에 대한 참조를 가져올 수 있습니다.
Dim myADONETConnectionManager As IDTSConnectionManager100 = _
Me.Connections.MyADONETConnection
자세한 내용은 스크립트 구성 요소에서 데이터 원본에 연결을 참조하십시오.
|