다음을 통해 공유


스크립트 구성 요소 코딩 및 디버깅

적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime

SSIS 디자이너에서 스크립트 구성 요소에는 메타데이터 디자인 모드와 코드 디자인 모드의 두 가지 모드가 있습니다. 스크립트 변환 편집기를 열면 구성 요소가 메타데이터 디자인 모드로 전환되고 메타데이터를 구성하고 구성 요소 속성을 설정합니다. 스크립트 구성 요소의 속성을 설정하고 메타데이터 디자인 모드에서 입력 및 출력을 구성한 후 코드 디자인 모드로 전환하여 사용자 지정 스크립트를 작성할 수 있습니다. 메타데이터 디자인 모드 및 코드 디자인 모드에 대한 자세한 내용은 스크립트 구성 요소 편집기에서 스크립트 구성 요소 구성을 참조 하세요.

코드 디자인 모드에서 스크립트 작성

스크립트 구성 요소 개발 환경

스크립트를 작성하려면 스크립트 변환 편집기의 스크립트 페이지에서 스크립트 편집을 클릭하여 VSTA(Microsoft Visual Studio Tools for Applications) IDE를 엽니다. VSTA IDE에는 색으로 구분된 Visual Studio 편집기, IntelliSense 및 개체 브라우저와 같은 Visual Studio .NET 환경의 모든 표준 기능이 포함되어 있습니다.

스크립트 코드는 Microsoft Visual Basic 또는 Microsoft Visual C#으로 작성되었습니다. 스크립트 변환 편집기에서 ScriptLanguage 속성을 설정하여 스크립트 언어를 지정합니다. 다른 프로그래밍 언어를 사용하려는 경우 선택한 언어로 사용자 지정 어셈블리를 개발하고 스크립트 구성 요소의 코드에서 해당 기능을 호출할 수 있습니다.

스크립트 구성 요소에서 작성하는 스크립트는 패키지 정의에 저장됩니다. 별도의 스크립트 파일이 없습니다. 따라서 스크립트 구성 요소의 사용은 패키지 배포에 영향을 주지 않습니다.

참고 항목

패키지를 디자인하는 동안 스크립트 코드는 임시로 프로젝트 파일에 기록됩니다. 파일에 중요한 정보를 저장하는 것은 잠재적인 보안 위험이므로 스크립트 코드에 암호와 같은 중요한 정보를 포함하지 않는 것이 좋습니다.

기본적으로 Option Strict는 IDE에서 비활성화되어 있습니다.

스크립트 구성 요소 프로젝트 구조

스크립트 구성 요소의 강력한 점은 작성해야 하는 코드의 양을 줄이는 인프라 코드를 생성할 수 있다는 것입니다. 이 기능은 입력 및 출력과 해당 열 및 속성이 고정되고 미리 알려져 있다는 사실에 의존합니다. 따라서 그 이후에 구성 요소의 메타데이터 내용을 변경하면 작성한 코드가 무효화될 수 있습니다. 이렇게 하면 패키지를 실행하는 동안 컴파일 오류가 발생합니다.

스크립트 구성 요소 프로젝트의 프로젝트 항목 및 클래스

코드 디자인 모드로 전환하면 VSTA IDE가 열리고 ScriptMain 프로젝트 항목이 표시됩니다. ScriptMain 프로젝트 항목에는 스크립트의 진입점 역할을 하고 코드를 작성하는 편집 가능한 ScriptMain 클래스가 포함되어 있습니다. 클래스의 코드 요소는 스크립트 태스크에 대해 선택한 프로그래밍 언어에 따라 달라집니다.

스크립트 프로젝트에는 두 개의 추가 자동 생성 읽기 전용 프로젝트 항목이 포함됩니다.

  • ComponentWrapper 프로젝트 항목에는 다음 세 가지 클래스가 포함됩니다.

    • UserComponent 클래스 - ScriptComponent에서 상속되며, 데이터를 처리하고 패키지와 상호 작용하는 데 사용할 메서드와 속성을 포함합니다. ScriptMain 클래스는 UserComponent 클래스에서 상속됩니다.

    • 스크립트 변환 편집기의 연결 관리자 페이지에서 선택한 연결에 대한 참조를 포함하는 Connections 컬렉션 클래스입니다.

    • 스크립트 변환 편집기의 스크립트 페이지에서 ReadOnlyVariableReadWriteVariables 속성에 입력된 변수에 대한 참조를 포함하는 Variables 컬렉션 클래스입니다.

  • BufferWrapper 프로젝트 항목에는 스크립트 변환 편집기의 입력 및 출력 페이지에 구성된 각 입력 및 출력에 대해 상속 ScriptBuffer 되는 클래스가 포함되어 있습니다. 이러한 각 클래스에는 구성된 입력 및 출력 열에 해당하는 형식화된 접근자 속성과 열이 포함된 데이터 흐름 버퍼가 포함됩니다.

이러한 개체, 메서드 및 속성을 사용하는 방법에 대한 자세한 내용은 스크립트 구성 요소 개체 모델 이해를 참조하세요. 특정 유형의 스크립트 구성 요소에서 이러한 클래스의 메서드 및 속성을 사용하는 방법에 대한 자세한 내용은 추가 스크립트 구성 요소 예제 섹션 을 참조하세요. 예제 항목에는 전체 코드 샘플도 포함되어 있습니다.

스크립트 구성 요소를 변환 으로 구성하면 ScriptMain 프로젝트 항목에 다음과 같은 자동 생성된 코드가 포함됩니다. 또한 코드 템플릿은 스크립트 구성 요소에 대한 개요와 변수, 이벤트 및 연결과 같은 SSIS 개체를 검색하고 조작하는 방법에 대한 추가 정보를 제공합니다.

' Microsoft SQL Server Integration Services Script Component  
' Write scripts using Microsoft Visual Basic 2008.  
' ScriptMain is the entry point class of the script.  
  
Imports System  
Imports System.Data  
Imports System.Math  
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper  
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper  
  
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _  
<CLSCompliant(False)> _  
Public Class ScriptMain  
    Inherits UserComponent  
  
    Public Overrides Sub PreExecute()  
        MyBase.PreExecute()  
        '  
        ' Add your code here for preprocessing or remove if not needed  
        '  
    End Sub  
  
    Public Overrides Sub PostExecute()  
        MyBase.PostExecute()  
        '  
        ' Add your code here for postprocessing or remove if not needed  
        ' You can set read/write variables here, for example:  
        ' Me.Variables.MyIntVar = 100  
        '  
    End Sub  
  
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)  
        '  
        ' Add your code here  
        '  
    End Sub  
  
End Class  
/* Microsoft SQL Server Integration Services user script component  
*  Write scripts using Microsoft Visual C# 2008.  
*  ScriptMain is the entry point class of the script.*/  
  
using System;  
using System.Data;  
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;  
using Microsoft.SqlServer.Dts.Runtime.Wrapper;  
  
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]  
public class ScriptMain : UserComponent  
{  
  
    public override void PreExecute()  
    {  
        base.PreExecute();  
        /*  
          Add your code here for preprocessing or remove if not needed  
        */  
    }  
  
    public override void PostExecute()  
    {  
        base.PostExecute();  
        /*  
          Add your code here for postprocessing or remove if not needed  
          You can set read/write variables here, for example:  
          Variables.MyIntVar = 100  
        */  
    }  
  
    public override void Input0_ProcessInputRow(Input0Buffer Row)  
    {  
        /*  
          Add your code here  
        */  
    }  
  
}  

스크립트 구성 요소 프로젝트의 추가 프로젝트 항목

스크립트 구성 요소 프로젝트에는 기본 ScriptMain 항목 이외의 항목이 포함될 수 있습니다. 프로젝트에 클래스, 모듈, 코드 파일 및 폴더를 추가할 수 있으며 폴더를 사용하여 항목 그룹을 구성할 수 있습니다.

추가하는 모든 항목은 패키지 내에 유지됩니다.

스크립트 구성 요소 프로젝트의 참조

프로젝트 탐색기에서 스크립트 작업 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 참조 추가를 클릭하여 관리되는 어셈블리에 대한 참조를 추가할 수 있습니다. 자세한 내용은 스크립팅 솔루션에서 다른 어셈블리 참조를 참조하세요.

참고 항목

VSTA IDE의 클래스 뷰 또는 프로젝트 탐색기에서 프로젝트 참조를 볼 수 있습니다. 보기 메뉴에서 이러한 창 중 하나를 엽니다. 프로젝트 메뉴, 프로젝트 탐색기 또는 클래스 뷰에서 새 참조를 추가할 수 있습니다.

스크립트 구성 요소에서 패키지와 상호 작용

스크립트 구성 요소에서 작성하는 사용자 지정 스크립트는 자동 생성된 기본 클래스에서 강력한 형식의 접근자를 통해 포함된 패키지의 변수 및 연결 관리자에 액세스하고 사용할 수 있습니다. 그러나 스크립트에서 사용할 수 있도록 하려면 코드 디자인 모드에 들어가기 전에 변수와 연결 관리자를 모두 구성해야 합니다. 또한 스크립트 구성 요소 코드에서 이벤트를 발생시키고 로깅을 수행할 수 있습니다.

스크립트 구성 요소 프로젝트의 자동 생성된 프로젝트 항목은 다음과 같은 개체, 메서드 및 속성을 사용하여 패키지와 상호 작용합니다.

패키지 기능 액세스 방법
변수 ScriptMain 클래스의 Variables 속성을 통해 노출되는 ComponentWrapper 프로젝트 항목의 Variables 컬렉션 클래스에서 명명되고 형식화된 접근자 속성을 사용합니다.

PreExecute 메서드는 읽기 전용 변수에만 액세스할 수 있습니다. PostExecute 메서드는 읽기 전용 및 읽기/쓰기 변수 모두에 액세스할 수 있습니다.
연결 ScriptMain 클래스의 Connections 속성을 통해 노출되는 ComponentWrapper 프로젝트 항목의 Connections 컬렉션 클래스에서 명명되고 형식화된 접근자 속성을 사용합니다.
이벤트 ScriptMain 클래스의 ComponentMetaData 속성과 IDTSComponentMetaData100 인터페이스의 Fire<X> 메서드를 사용하여 이벤트를 발생시킵니다.
로깅 ScriptMain 클래스의 메서드를 Log 사용하여 로깅을 수행합니다.

스크립트 구성 요소 디버깅

스크립트 구성 요소에서 코드를 디버그하려면 코드에서 중단점을 하나 이상 설정한 다음 VSTA IDE를 닫아 SSDT(SQL Server Data Tools)에서 패키지를 실행합니다. 패키지 실행이 스크립트 구성 요소에 들어가면 VSTA IDE가 다시 열리고 코드가 읽기 전용 모드로 표시됩니다. 중단점에 도달한 후에는 변수 값을 검사하고 나머지 코드를 단계별로 실행할 수 있습니다.

참고 항목

패키지 실행 태스크에서 실행되는 자식 패키지의 일부로 스크립트 구성 요소를 실행할 때는 스크립트 구성 요소를 디버그할 수 없습니다. 이러한 경우 자식 패키지의 스크립트 구성 요소에서 설정한 중단점은 무시됩니다. 자식 패키지를 별도로 실행하여 일반적으로 디버그할 수 있습니다.

참고 항목

여러 스크립트 구성 요소가 포함되어 있는 패키지를 디버깅하는 경우 디버거는 한 개의 스크립트 구성 요소를 디버깅합니다. Foreach 루프 또는 For 루프 컨테이너의 경우처럼 디버거가 완료되면 시스템에서 다른 스크립트 구성 요소를 디버그할 수 있습니다.

다음 메서드를 사용하여 스크립트 구성 요소의 실행을 모니터링할 수도 있습니다.

  • System.Windows.Forms 네임스페이스의 MessageBox.Show 메서드를 사용하여 실행을 중단하고 모달 메시지를 표시합니다. (디버깅 프로세스를 완료한 후 이 코드를 제거합니다.)

  • 정보 메시지, 경고 및 오류에 대한 이벤트를 발생합니다. FireInformation, FireWarning 및 FireError 메서드는 Visual Studio 출력 창에 이벤트 설명을 표시합니다. 그러나 FireProgress 메서드, Console.Write 메서드 및 Console.WriteLine 메서드는 출력 창에 정보를 표시하지 않습니다. FireProgress 이벤트의 메시지는 SSIS 디자이너의 진행률 탭에 표시됩니다. 자세한 내용은 스크립트 구성 요소에서 이벤트 발생을 참조 하세요.

  • 이벤트 또는 사용자 정의 메시지를 사용하도록 설정된 로깅 공급자에 기록합니다. 자세한 내용은 스크립트 구성 요소의 로깅을 참조 하세요.

데이터를 대상에 저장하지 않고 원본 또는 변환으로 구성된 스크립트 구성 요소의 출력을 검사하려는 경우 행 개수 변환사용하여 데이터 흐름을 중지하고 데이터 뷰어를 스크립트 구성 요소의 출력에 연결할 수 있습니다. 데이터 뷰어에 대한 자세한 내용은 데이터 흐름 디버깅을 참조하세요.

섹션 내용

스크립트 구성 요소 코딩에 대한 자세한 내용은 이 섹션의 다음 항목을 참조하세요.

스크립트 구성 요소 개체 모델 이해
스크립트 구성 요소에서 사용할 수 있는 개체, 메서드 및 속성을 사용하는 방법을 설명합니다.

스크립팅 솔루션에서 다른 어셈블리 참조
스크립트 구성 요소의 .NET Framework 클래스 라이브러리에서 개체를 참조하는 방법을 설명합니다.

스크립트 구성 요소에 대한 오류 출력 시뮬레이션
스크립트 구성 요소에서 처리하는 동안 오류를 발생시키는 행에 대한 오류 출력을 시뮬레이션하는 방법을 설명합니다.

외부 리소스

  • blogs.msdn.com SSIS 2008 및 R2 설치에 대한 블로그 항목, VSTA 설정 및 구성 문제

참고 항목

스크립트 구성 요소 편집기에서 스크립트 구성 요소 구성