多くの人が私が何を達成しようとしているのかを尋ねてきたので、ここに説明があります。
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
一時的です。値が入力されたテーブル。
@tempcounttable
304行、つまりの値があります@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'