4

811 レコードのテーブルがあります。一度に5 つのレコードを取得し、それを変数に割り当てたいと考えています。次回SSISforeachでループ タスクを実行すると、さらに 5 つのレコードがループされ、変数が上書きされます。カーソルを使用してみましたが、解決策が見つかりませんでした。どんな助けでも大歓迎です。たとえば、このようなテーブルがあります

ServerId ServerName
1         Abc11
2         Cde22
3         Fgh33
4         Ijk44
5         Lmn55
6         Opq66
7         Rst77
.           .
.           .
.           .

次のようにクエリで最初の 5 つの名前を取得し、それを変数に割り当てる必要があります

ServerId ServerName
1         Abc11
2         Cde22
3         Fgh33
4         Ijk44
5         Lmn55

次に、次のループは別の 5 つの名前を取り、最後のレコードが消費されるまで変数値を上書きします。

4

2 に答える 2

6

ltn の回答を考慮に入れると、これが SSIS で行を制限する方法です。

デザインは次のようになります

ここに画像の説明を入力

ステップ 1 : 変数を作成する

  Name       DataType 
  Count        int
  Initial      int
  Final        int

ステップ 2: 最初の Execute SQL タスクの場合、カウントを格納するための SQL を記述します。

  Select count(*) from YourTable

このタスクのGeneralタブで、ResultSet を として選択しますSingle Row

ResultSet タブで、結果を変数にマップします。

  ResultName       VariableName
    0               User::Count

ステップ 3: For ループ コンテナに、以下に示す式を入力します。

ここに画像の説明を入力

ステップ 4: For ループ内で SQL 実行タスクをドラッグし、式を記述します。 ここに画像の説明を入力

パラメータマッピングで、initial変数をマップします

  VariableName    Direction   DataType   ParameterName   ParameterSize
   User::Initial   Input       NUMERIC     0                -1

結果セットタブ

  Result Name     Variable Name
   0                 User::Final

DFT内で、特定の行を取得するためにsqlを書くことができます

ここに画像の説明を入力

[パラメーター] をクリックし、変数を選択してINITIALFINAL

于 2012-12-24T09:54:46.077 に答える
1

ページングサイクル間でデータが更新されず、並べ替え順序が常に同じである場合は、次のような方法を試すことができます。

CREATE PROCEDURE TEST
(
    @StartNumber INT,
    @TakeNumber INT
)
AS
SELECT TOP(@TakeNumber) 
    *
FROM(
    SELECT
        RowNumber=ROW_NUMBER() OVER(ORDER BY IDField DESC),
        NameField
    FROM 
        TableName
)AS X   
WHERE RowNumber>=@StartNumber
于 2012-12-24T03:21:49.667 に答える