5

テーブルがあり、500行あります。10 行だけを取得したいのですが、制御フローのみを使用して別のテーブルに挿入したいと考えています。データ フロー タスクを通じて、OLEDB ソースと OLEDB 宛先を使用できます。しかし、execute sql task と for each ループを使用するような結果が必要です。そのようにすることは可能ですか?私の考えは、10 レコードのセットを取得し、foreach ループを使用してすべての行を反復し、execute sql タスクを使用してテーブルに挿入することです。宛先テーブルはその場で作成する必要があります。私はいくつかのアプローチを試みましたが、動きませんでした。画像ファイルを見つけてください。ここに画像の説明を入力

4

2 に答える 2

6

Northwind からの例

実行時に作成するテーブルの列を表す変数を (変数コレクションで) 作成します。例:-

       Customer_ID as string
       Order_Id as int   

次に、SQL 実行タスクを作成し、以下のクエリを記述して最初の 10 行を選択する必要があります。

   Select top 10* from orders

FullResultSet を使用し、結果セット構成で、テーブル行を variableName :- User::Result ResultName:0 に格納します。

実行 SQL タスクを 1 つドロップして、その場でテーブルを作成する

 IF OBJECT_ID('myOrders') IS not NULL
 drop table myOrders

 Create table myOrders
 (OrderID  int,
  CustomerID varchar(50)
 )

Execute sql タスクからの 2 つのフローを結合し、Foreach ループに接続します。

foreach ループをドラッグします。コレクションでは、列挙子の型を Foreach ADO 列挙子として使用します。列挙子の構成では、SQL 実行タスクの上位 10 行を格納する user::Result 変数を選択し、ラジオ ボタン「最初のテーブルの行」を選択します。変数マッピングでは、最初のステップで作成した列変数をマップすると、インデックスは最初の列で0、2番目の列で1になります ここに画像の説明を入力

foreach ループ内に SQL 実行タスクをドラッグし、以下のクエリを記述します。

  Insert into myOrders( OrderID,CustomerID)
  values
  (?,?)

sql タスクの実行でパラメーター マッピング構成を使用してパラメーターをマップします。

  VariableName : OrderID  Direction : Input   DataType=Long ParamterName=0
  VariableName : CustomerID  Direction : Input   DataType=varchar ParamterName=1
于 2012-05-30T06:46:30.670 に答える
3

「スタディモード」でこれを行っていることを願っています。データフローの制御フローでこれを行う理由はありません。

とにかく、印刷画面は正しいので、最初に別のSQL実行タスクを追加して宛先テーブルを作成します。

次に、SQL実行タスクに必要な10行を取得するクエリが必要であり、その結果セットは「完全な結果セット」に設定され、[結果セット]タブで結果セットを次のような変数にマップする必要があります。

ここに画像の説明を入力してください

foreachループコンテナを次のように構成します。

ここに画像の説明を入力してください ここに画像の説明を入力してください

foreachの各ループで、変数の値にアクセスできます。次に、別のSQL実行タスクを使用して、新しいクレートテーブルに挿入できます。

于 2012-05-30T08:20:45.380 に答える