首页 > 解决方案 > 从三个源列获取时从目标列返回输出

问题描述

我有一个源表和一个目标表,我的源表有三列组成我的目标目标列。我的目标列是电话,我的源列是 WorkNumber、CellNumber、HomeNumber。当我查找客户帐户时,我想在目标列中查看 customerNumber。因此,基本上我的三个源列中的所有内容都应该在我的一个目标列中及其各自的客户帐户中。有没有一种方法可以通过 t-sql 或 ssis 将我的目标列设置为等于我的三个源列?

标签: sqlsql-serverssis

解决方案


DECLARE @CustomerId INT 

DECLARE cur_insert_phone CURSOR FOR 
SELECT CustomerId FROM SourceDatabase.Schema.SourceTable 
ORDER BY CustomerId

OPEN cur_insert_phone

FETCH NEXT FROM cur_insert_phone INTO @CustomerId

WHILE @@FETCH_STATUS = 0 

BEGIN
    INSERT INTO DestinationDatabase.Schema.SourceTable (CustomerId, CustomerNumber, PhoneType)

    SELECT t.CustomerId, t.PhoneNumber, t.PhoneType
    FROM
    (SELECT CustomerId, WorkNumber,CellNumber,HomeNumber FROM SourceDatabase.Schema.SourceTable WHERE CustomerId = @CustomerId) p
    UNPIVOT 
        (
            PhoneNumber FOR PhoneType IN (WorkNumber,CellNumber,HomeNumber)
        ) AS t 

    FETCH NEXT FROM cur_insert_phone INTO @CustomerId

END

CLOSE cur_insert_phone
DEALLOCATE cur_insert_phone
GO

推荐阅读