我有一个 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