【问题标题】:SSIS : how to convert the source column from ID to ValueSSIS:如何将源列从 ID 转换为值
【发布时间】:2013-06-07 11:50:42
【问题描述】:

我正在创建一个 SSIS 包以将数据从 CSV 文件加载到 SQL 表。示例 CSV 文件是

EMP_ID,EMP_NAME,DEPT_ID,MANAGER_ID,SALARY
1801,SCOTT,20,1221,3000
1802,ALLEN,30,1221,3400

我需要将数据加载到 SQL Server 表中,但在加载时我需要加载 Department NameManager Name 而不是它们的 IDs。所以我需要将CSV源转换为

1801,SCOTT,FINANCE,JOHNSON,3000
1802,ALLEN,HR,JOHNSON,3400

Department NameManager name 的值仅来自 SQL Server 数据库。但是如何查询 ID 并将其转换为文本值呢?

我是 SSIS 新手,请建议我如何实现这一目标。

谢谢 约翰

【问题讨论】:

    标签: sql-server ssis


    【解决方案1】:
        CREATE PROCEDURE [dbo].[BulkInsert]            
        (            
       -- Declare Parameters here for your CSV file   
    
    
        )            
        AS            
        BEGIN            
        SET NOCOUNT ON;            
    
        declare @query varchar(max)            
    
    
        CREATE TABLE #TEMP            
        (            
        [FieldName] [int] NOT NULL ,          
        [FieldName] int NOT NULL,          
        )            
    
    
        SET @query = 'BULK INSERT #TEMP FROM ''' + PathOfYourTextFile + ''' WITH ( FIELDTERMINATOR = '','',ROWTERMINATOR = ''\n'')'            
        --print @query            
        --return            
        execute(@query)            
    
    
        BEGIN TRAN;            
    
        MERGE TableName AS Target 
        -- Now here you can get the value Department Name and Manager Name by using Target.Id --in the table from where you mant to get the value of the Manager Name            
        USING (SELECT * FROM #TEMP) AS Source            
        ON (Target.YourTableId = Source.YourTextFileFieldId)
        -- In the above line we are checking if the particular row exists in the table(Table1)  then update the Table1 if not then insert the new row in Table-1.           
    
        WHEN MATCHED THEN            
        UPDATE SET             
        Target.SomeId= Source.SomeId
        WHEN NOT MATCHED BY TARGET THEN            
    
        -- Insert statement  
    

    上面的代码只是一个示例,您可以从中获得帮助,您可以在代码中进行编辑。还有一件对您来说更重要的事情,批量插入是保存 CSV 文件的好方法之一。所以尝试使用这个..:)

    【讨论】:

    • 您好,感谢您的回复,但实际要求不同,我需要使用 SSIS 包。我希望一个更简单的例子能更好地解释这个要求。所以我举了那个例子。请告诉我如何使用 SSIS 包实现这一点。在处理源数据时,我需要用数据库中的文本值替换 ID 并移动到目标表。
    • 最后我使用了批量插入,这比使用包装要容易得多
    【解决方案2】:

    在数据流选项卡的 SSIS 包中,使用工具箱中的 LOOKUP 过程。您将指定要从中获取字符串值的表、用于连接的列以及用于替换您的 ID 的列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      相关资源
      最近更新 更多