2011-08-23 8 views
0

SQL Server 2008 R2에서 SSIS의 스크립트 구성 요소를 사용하여 읽기/쓰기 변수에 쓸 수 있어야 플랫 파일 내보내기의 파일 이름을 생성 할 수 있습니다. 파일 이름을 저장할 패키지 수준의 변수를 만들고 변수가 포함 된 식을 사용하도록 플랫 파일 연결을 설정합니다.SSIS 스크립트 구성 요소가 ReadWriteVariable에 쓸 수 없음

나는 무엇보다도 스크립트에서 파일 이름을 동적으로 빌드하는 스크립트 구성 요소가 있습니다. 메소드를 실행하십시오. 스크립트 구성 요소의 ReadWriteVariables 설정에서 변수를 설정했습니다.

플랫 파일 연결 관리자가 대상 파일을 설정하기 위해 표현식을 평가하려고하기 때문에 변수에 기본값이 없으면 패키지가 즉시 실패합니다. 그래서, 그냥 자리 표시 자 파일 이름을 넣었습니다.

이제 문제는 스크립트가 지정하는 자리 표시 자 대신 항상 자리 표시 자 파일 이름을 사용한다는 것입니다. 이러한 변수에 쓸 수있는 최선의 방법은 무엇입니까? 나는 Variables.VariableName = "value"를 시도 했었고, VariableDispenser와 this.ReadWriteVariables [ "VariableName"]. value를 사용해 보았습니다. 그리고 그 중 아무 것도 스크립트에서 설정 한 값을 유지하지 못합니다.

+0

패키지에서 이벤트의 순서는 무엇입니까? 이 스크립트 구성 요소가 아니라이 이름 확인을 수행하는 스크립트 작업 (제어 흐름)이라고 가정합니다. 그게 맞습니까? –

답변

0

Data Flow TaskScript Component 내에서 패키지 변수에 값을 할당 할 수있는 한 가지 방법이 있습니다.

속성 대화 상자에서 변수를 지정하는 대신 Script Task 또는 Script Component 변수를 잠그려고합니다. 나는 이것이 유지하기 더 쉽다고 생각한다. 다음 예에서

, 난 파일 이름 패키지라는 변수를 상기 변수는 스크립트 요소 내부 C:\Temp\PathChanged 값이 할당되고있다.

나는 스크립트 구성 요소이 파일 이름과 같은 패키지 변수 값을 조작 할 수는 없지만 수행하려는 작업에 따라 달라질 수 있다고 생각합니다.

희망이 있습니다.

/* Microsoft SQL Server Integration Services 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(); 
    } 

    public override void PostExecute() 
    { 
     base.PostExecute(); 

     IDTSVariables100 varCollection = null; 
     this.VariableDispenser.LockForWrite("User::FileName"); 
     this.VariableDispenser.GetVariables(out varCollection); 

     varCollection["User::FileName"].Value = @"C:\Temp\PathChanged"; 
    } 

    public override void Input0_ProcessInputRow(Input0Buffer Row) 
    { 
    } 
} 

Script Component

+0

올바른 대답을 얻는 열쇠는 스크립트 구성 요소가 이러한 변수에 쓸 수있는 것으로 보이지 않는다는 것입니다. 스크립트 작업에서 스크립트를 제어 흐름으로 옮기면 모두 작동하기 시작했습니다. – kettch

관련 문제