テーブルを取り、他の多くの列を検索して、次のようなデータセットになる 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