sql >> データベース >  >> RDS >> Sqlserver

SSIS - foreach ループ コンテナーを使用して転送後にレコードを更新する

    おそらく、あなたは今までにあなたの質問に対する答えを見つけているでしょう。この回答は、この質問に出くわす可能性のある他の人を助けるためのものです。 SSIS を使用してデータ転送を解決するために使用できるオプションを次に示します。サーバー A とサーバー B の両方を指す接続文字列を SSIS パッケージから作成できると仮定しました。その仮定が間違っている場合は、この回答を削除できるようにお知らせください。この例では、SQL Server 2008 R2 を使用しています。 バックエンドとして。私は 2 つのサーバーを持っていないので、異なる Schemas に 2 つの同一のテーブルを作成しました。 サーバーAServerB .

    段階的なプロセス:

    <オール> <リ>

    Connection manager SSIS のセクションで、ServerA という 2 つの OLE DB 接続を作成します。 と ServerB .この例は同じサーバーを指していますが、シナリオでは、接続は 2 つの異なるサーバーを指す必要があります。スクリーンショット #1 を参照 .

    <リ>

    2 つのスキーマ ServerA を作成します および ServerB .テーブル dbo.ItemInfo を作成します 両方のスキーマで。これらのテーブルの作成スクリプトは、スクリプト の下にあります。 セクション。繰り返しますが、これらのオブジェクトはこの例のためだけのものです.

    <リ>

    両方のテーブルにいくつかのサンプル データを入力しました。テーブル ServerA.ItemInfo 2,222 rowsを含む およびテーブル ServerB.ItemInfo 10,000 rowsを含む .質問によると、不足している 7,778 行は ServerB から転送する必要があります ServerA へ .スクリーンショット #2 を参照 .

    <リ>

    SSIS パッケージの [制御フロー] タブで、スクリーンショット #3 に示すようにデータ フロー タスクを配置します。 .

    <リ>

    データ フロー タスクをダブルクリックして [データ フロー] タブに移動し、以下の説明に従ってデータ フロー タスクを構成します。 サーバー B OLE DB Sourceです; サーバー A でレコードを検索 Lookup transformation taskです と サーバー A OLE DB Destination です .

    <リ>

    OLE DB Source の構成 サーバー B スクリーンショット #4 に示すように そして #5 .

    <リ>

    Lookup transformation taskの構成 サーバー A でレコードを検索 スクリーンショット #6 に示すように - #8 .この例では、ItemId が一意のキーです。したがって、これは 2 つのテーブル間で欠落しているレコードを検索するために使用される列です。 Server A に存在しない行のみが必要なので 、オプション Redirect rows to no match output を選択する必要があります .

    <リ>

    OLE DB Destination を配置します データ フロー タスクについて。 Lookup 変​​換タスクを OLE DB Destination に接続すると、Input Output Selection のプロンプトが表示されます。 ダイアログ。 Lookup No Match Output を選択します スクリーンショット #9 に示すダイアログから . OLE DB Destination を構成する サーバー A スクリーンショット #10 に示すように そして #11 .

    <リ>

    データ フロー タスクが構成されると、スクリーンショット #12 のようになります。 .

    <リ>

    パッケージの実行例をスクリーンショット #13 に示します。 .お気づきのように、欠落している 7,778 rows Server B から転送されました Server Aへ .スクリーンショット #14 を参照 パッケージの実行後にテーブル レコード数を表示します。

    <リ>

    要件は欠落しているレコードを挿入することだけだったので、このアプローチが使用されました。既存のレコードを更新し、有効でなくなったレコードを削除する場合は、この リンク。タブ区切りファイルを読み込むための SQL Integration Services? リンクの例は、フラット ファイルを SQL に転送する方法を示していますが、既存のレコードを更新し、無効なレコードを削除します。また、例は多数の行を処理するように微調整されています。

    お役に立てば幸いです。

    スクリプト

    .

    CREATE SCHEMA [ServerA] AUTHORIZATION [dbo]
    GO
    
    CREATE SCHEMA [ServerB] AUTHORIZATION [dbo]
    GO
    
    CREATE TABLE [ServerA].[ItemInfo](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [ItemId] [varchar](255) NOT NULL,
        [ItemName] [varchar](255) NOT NULL,
        [ItemType] [varchar](255) NOT NULL,
        CONSTRAINT [PK_ItemInfo] PRIMARY KEY CLUSTERED ([Id] ASC),
        CONSTRAINT [UK_ItemInfo_ItemId] UNIQUE NONCLUSTERED ([ItemId] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE TABLE [ServerB].[ItemInfo](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [ItemId] [varchar](255) NOT NULL,
        [ItemName] [varchar](255) NOT NULL,
        [ItemType] [varchar](255) NOT NULL,
        CONSTRAINT [PK_ItemInfo] PRIMARY KEY CLUSTERED ([Id] ASC),
        CONSTRAINT [UK_ItemInfo_ItemId] UNIQUE NONCLUSTERED ([ItemId] ASC)
    ) ON [PRIMARY]
    GO
    

    スクリーンショット #1:

    スクリーンショット #2:

    スクリーンショット #3:

    スクリーンショット #4:

    スクリーンショット #5:

    スクリーンショット #6:

    スクリーンショット #7:

    スクリーンショット #8:

    スクリーンショット #9:

    スクリーンショット #10:

    スクリーンショット #11:

    スクリーンショット #12:

    スクリーンショット #13:

    スクリーンショット #14:




    1. OpenVPNを使用してクラウド内のデータベースクラスターへのアクセスを保護する

    2. MySQLデータベースで最も繰り返される類似フィールドを取得する

    3. MySQLで[メールで保護された]権限で実行するにはどうすればよいですか?

    4. ラベルの最大文字数(テーブル名、列など)