テーブルがあり、500行あります。10 行だけを取得したいのですが、制御フローのみを使用して別のテーブルに挿入したいと考えています。データ フロー タスクを通じて、OLEDB ソースと OLEDB 宛先を使用できます。しかし、execute sql task と for each ループを使用するような結果が必要です。そのようにすることは可能ですか?私の考えは、10 レコードのセットを取得し、foreach ループを使用してすべての行を反復し、execute sql タスクを使用してテーブルに挿入することです。宛先テーブルはその場で作成する必要があります。私はいくつかのアプローチを試みましたが、動きませんでした。画像ファイルを見つけてください。
2 に答える
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
「スタディモード」でこれを行っていることを願っています。データフローの制御フローでこれを行う理由はありません。
とにかく、印刷画面は正しいので、最初に別のSQL実行タスクを追加して宛先テーブルを作成します。
次に、SQL実行タスクに必要な10行を取得するクエリが必要であり、その結果セットは「完全な結果セット」に設定され、[結果セット]タブで結果セットを次のような変数にマップする必要があります。
foreachループコンテナを次のように構成します。
foreachの各ループで、変数の値にアクセスできます。次に、別のSQL実行タスクを使用して、新しいクレートテーブルに挿入できます。