하나의 Excel 시트와 다른 시트 사이에서 잠재적으로 변경 될 수있는 많은 것들이있을 수 있습니다. 따라서이 솔루션은 시작점으로 만 사용하십시오. 질문 사항이 있으면 알려 주시기 바랍니다. - (면책 조항
;-)을 통해 I는 다음과 같습니다 Excel 파일 생성 :
필드 이름을 | 스왑 ID | 할당 ID | 설명 | 중개인 ID
필드 유형 | 영숫자 | 영숫자 | 영숫자 | 영숫자
필드 길이 | char (40) | char (40) | char (100) | 문자는 (50)
- 은 Excel에서 준비 테이블 (STG_Sheet1)에 파일을로드합니다.
CREATE TABLE [DBO]. STG_Sheet1] (
[F1]를 varchar NULL [F2]를 varchar NULL [F3]를 varchar NULL [F4]를 varchar NULL [ F5] varchar NULL ) ON [PRIMARY]
이제 새 SSIS 패키지를 만듭니다.
2.1 다음 변수를 만듭니다.
2.1.1 oFieldList; Data type: Object
2.1.2 sColumn; Data type: String, Value: F2
2.1.3 sSql; Data type: String, Value: "SELECT " + @[User::sColumn] + " AS COL FROM [dbo].[STG_Sheet1]"
2.1.4 sSQLInsert; Data type: String
2.1.5 sValues; Data type: String
2.2 스크립트 작업을 배치합니다.
2.2.1 Result Set: Full result set
2.2.2 SQL Statement:
SELECT sac.name as ColumnName FROM sys.all_columns sac
INNER JOIN sys.all_objects sao ON sao.object_id = sac.object_id
WHERE sao.name = 'STG_Sheet1' AND sac.name <> 'F1'
2.2.3 Result Set: Result Name: 0; Variable Name: User::oFieldList
2.3 놓습니다 DFT
2.4.1 Place an OLE DB Source
2.4.1.1 Data access mode: SQL Command from variable
2.4.1.2 Variable name: sSQL
2.4.1.3 Columns: COL
2.4.2 Place a Script component as Transformation
2.4.2.1 Input Columns: COL : ReadOnly
2.4.2.2 Script: ReadWrite Variables:User::sValues
2.4.2.3 Edit Script : Code below
public class ScriptMain : UserComponent
{
string colValue = string.Empty;
public override void PreExecute()
{
base.PreExecute();
}
public override void PostExecute()
{
base.PostExecute();
string x = Variables.sValues;
int iFirstCommaAt = colValue.IndexOf (',');
colValue = colValue.Substring(iFirstCommaAt + 1);
Variables.sValues = colValue;
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string x = Row.COL;
colValue = string.Format("{0},'{1}'", colValue, x);
}
}
2.5 놓습니다 스크립트 작업 Foreach 루프 컨테이너
2.4 장소 내부 Foreach 루프 컨테이너 이제
2.3.1 Enumerator: Foreach ADO Enumerator
2.3.2 ADO object source variable: User::oFieldList
2.3.3 Variable Mappings: User::sColumn: 0
:
2.5.1 ReadOnlyVariables: User::sValues
2.5.2 ReadWriteVariables: User::sSQLInsert
2.5.3 Edit Script: Code below
public void Main()
{
string s = "INSERT INTO dbo.SHEET1 ([Field Name], [Field Type], [Field Length]) VALUES ";
string sValue = Dts.Variables["User::sValues"].Value.ToString();
string sSQLInsert = string.Empty;
Dts.Variables["User::sSQLInsert"].Value = string.Format("{0} ({1})", s, sValue);
Dts.TaskResult = (int)ScriptResults.Success;
}
2.6 놓습니다 SQL 실행 태스크
2.6.1 SQLSourceTyoe: Variable
2.6.2 SourceVariable: User::sSQLInsert
행을 건너 뛰는 데 도움이되지만 열을 행으로 변환해야하는 문제에 도움이되지 않습니다. 예를 통해이를 분명하게 알 수없는 경우이를 명확히하기 위해 원래 게시물에 메모를 추가했습니다. – Damian
질문 : 행 13 이후에 시트에 실제 데이터가 FieldName | FieldType | 필드 길이 ....? –
No. 셀 A7 : A13은 열 머리글 정보를 포함하고 셀 B7 : AZ13은 실제 데이터를 포함합니다. – Damian