0

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

1 に答える 1

0

これまでのところ、データ変換を行ってレコードをセットアップし、それを一時テーブルに保存し、質問に含めた SQL を実行してから、一時テーブルから読み取る別のデータ変換を実行して終了するのが最善です。輸入

于 2012-08-29T20:10:11.063 に答える