0

由于许多人问我要达到什么目标 - 这是一个解释。

我必须向 Benfits 运营商提供文件馈送。文件格式为 Member1 Record、Benefits1 记录、Benefits2 记录等。Member2 Record、Benefits1、Benefits2 等。

我这样做的方法是获取所有成员的记录并将其放入@member table. 然后我得到了所有成员的所有福利并放入@Medical_nonHMO table.

然后我循环遍历,获取第一条@member记录(只有一条记录)和相应的@Medical_nonHMO记录(可能超过 1条)。然后我从中获取第二个成员记录@member和相应的福利记录@Medical_nonHMO,依此类推。

是的,我已经检查了 的值@count

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

我不确定如何使用游标来实现这一点。

我有大约 300 条会员记录和大约 400 多条福利记录。它适用于大约 200 条记录,然后突然结束,有时会出现 -'Out of Memory' 错误。

我有以下循环。

@member,@medical_nonHMO是温度。填充有值的表。

@tempcounttable有 304 行,即@count

我正在遍历每个会员和会员福利

我面临的问题是,即使在执行查询之后,它也只循环了 174 次。

'Out of Loop' 不会被打印出来。

但这种情况只是偶尔发生。有时循环完全执行并打印“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返回 174 行而不是您期望的 304 行,因此是 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 回答