0

多くの人が私が何を達成しようとしているのかを尋ねてきたので、ここに説明があります。

Benfits キャリアにファイル フィードを提供する必要があります。ファイルの形式は、Member1 レコード、Benefits1 レコード、Benefits2 レコードなどです。Member2 レコード、Benefits1、Benefit2 などです。

私がこれを行った方法は、すべてのメンバーのレコードを取得して、@member table. 次に、すべてのメンバーの特典をすべて取得し、 に入れました@Medical_nonHMO table

次に、ループして、最初の@memberレコード (1 つのレコードのみ) と対応する@Medical_nonHMOレコード (複数の可能性があります) を取得します。次に、から 2 番目のメンバー レコードを取得し@member、対応する特典レコードを取得@Medical_nonHMOします。

かつ はい、 の値を確認しました@count

    Select Max(idx) and select count(*) are returning the same value

これを達成するためにカーソルを使用する方法がわかりません。

約 300 のメンバー レコードと約 400 以上の特典レコードがあります。約 200 レコードでは正常に動作し、その後突然終了し、「メモリ不足」エラーが発生することがあります。

次のループがあります。

@member,@medical_nonHMO一時的です。値が入力されたテーブル。

@tempcounttable304行、つまりの値があります@count

私は各メンバーとメンバー特典のためにループしています

私が直面している問題は、クエリが実行された後でも、174 回しかループしていないことです。

「アウト オブ ループ」は印刷されません。

しかし、これはたまにしか起こりません。ループが完全に実行され、「Out of Loop」と出力されることがあります

DECLARE @tempCounttable TABLE
(
idx smallint Primary Key IDENTITY(1,1),
SSN varchar(9),
SSN_dep varchar(9),
fname varchar(25)
)


INSERT into @tempCounttable 
select SubscriberSSN,   -- Employee SSN
   MemberSSN,   -- Dependent SSN
   FirstName
 from @member

select @count =  MAX(idx) from @tempCounttable
Set @i = 1
While(@i <= @count) 
Begin

  select * from @member
 where SubscriberSSN = (select SSN from @tempCounttable where idx = @i)
and MemberSSN = (select SSN_dep  from @tempCounttable  where idx = @i)
    and FirstName = (select fname from @tempCounttable  where idx = @i)

   select * from @Medical_nonHMO
   where SSN = (select SSN from @tempCounttable where idx = @i)
    and SSN_dependent = (select SSN_dep from @tempCounttable where idx = @i)
     and fname = (select fname from @tempCounttable where idx = @i)

Set @i = @i + 1
select @i           
end

 select 'OUT OF LOOP'
4

2 に答える 2

1

@count期待どおりの 304 行ではなく 174 行を返していると想定しているため、174 回の反復になります。テーブルは他の場所で変更されていますか? @countまた、毎回クエリを実行する前に印刷して、指標を示してください。

補足として、私は個人的になぜこれが while ループなのか理解できませんか? データを選択しているだけなので、結合@memberして組み合わせることができます。@tempCounttable

SELECT * FROM @member m
 INNER JOIN @tempCounttable t ON m.memberSSN = t.SSN_dep:

fname と SSN でフィルタリングすることもできます。

于 2012-08-22T15:34:17.453 に答える
0

@count が正しいことを次のように確認してください。

select @count =  MAX(idx) from @tempCounttable
Set @i = 1
While(@i <= @count) 
Begin
  select SSN from @tempCounttable where idx = @i
  Set @i = @i + 1
  select @i           
end
select 'OUT OF LOOP'
于 2012-08-22T17:17:53.217 に答える