在SSIS中创建唯一列

时间:2012-08-27 23:37:03

标签: sql sql-server-2005 ssis

我有一个SSIS包,它接受一个表并查找很多其他列,最终得到一个数据集,如:

ItemID | ProductGroupCode | Product Code
1      |  AAAA            |
2      |  AAAA            |
3      |  BBBB            |
4      |  BBBB            |
5      |  CCCC            |

ItemID是唯一的。我需要通过将ProductGroupCode连接到从1700开始的4位数字来创建一个唯一的ProductCode。

所以数据看起来像:

ItemID | ProductGroupCode | Product Code
1      |  AAAA            | AAAA1000
2      |  AAAA            | AAAA1001
3      |  BBBB            | BBBB1000
4      |  BBBB            | BBBB1001
5      |  CCCC            | CCCC1000

但是,还需要检查产品表中是否已存在产品代码。产品代码AAAA1000很可能已经存在。如果是这种情况,则应增加产品代码。

我能够在SQL中使用游标,表“ProductImportHalfWay”是SSIS包中途的数据集

DECLARE @ProductCode VARCHAR(10),
        @CurrentProductCode VARCHAR(10),
        @ItemID INT,
        @ProductNumber INT

SELECT @ProductNumber = 0, @CurrentProductCode = ''

DECLARE productGroupCodes CURSOR FAST_FORWARD
FOR SELECT distinct ProductGroupCode, ItemID
FROM ProductImportHalfWay 
ORDER BY ProductGroupCode 

OPEN productGroupCodes
    FETCH NEXT FROM productGroupCodes INTO @ProductCode, @ItemID

    WHILE @@FETCH_STATUS = 0
    BEGIN
        IF @CurrentProductCode <> @ProductCode
        BEGIN
            SET @CurrentProductCode = @ProductCode
            SET @ProductNumber = 1699 --set to 1699 so that we can add 1 to get 1700
        END

        SET @ProductNumber = @ProductNumber + 1
        WHILE EXISTS (SELECT 1 FROM Product WHERE ProductCode = @ProductCode + CAST(@ProductNumber AS VARCHAR(4)))
        BEGIN
            SET @ProductNumber = @ProductNumber + 1
            --print 'increase'
        END     

        UPDATE ProductImportHalfWay
        SET ProductGroupCode = @ProductCode + CAST(@ProductNumber AS VARCHAR(4))
        WHERE ItemID = @ItemID

        FETCH NEXT FROM productGroupCodes
        INTO @ProductCode, @ItemID
    END
CLOSE productGroupCodes
DEALLOCATE productGroupCodes

但我不知道如何把它放在数据转换的中间(我真的不想输出“ProductImportHalfWay”表)


编辑:额外的例子 如果数据库中已存在ProductCode AAAA1000,那么导入的记录应该是

ItemID | ProductGroupCode | Product Code
1      |  AAAA            | AAAA1001
2      |  AAAA            | AAAA1002
3      |  BBBB            | BBBB1000
4      |  BBBB            | BBBB1001
5      |  CCCC            | CCCC1000

1 个答案:

答案 0 :(得分:0)

到目前为止,我们提出的最好的方法是进行数据转换以设置记录,将其保存到临时表,运行我在问题中包含的SQL然后从临时表中运行另一个数据转换读取完成导入