由于很多人问我想要实现什么 - 这是一个解释。
我必须向Benfits运营商提供文件馈送。文件的格式是 会员1记录, 福利1记录, 福利2记录等.. 会员2记录, Benefits1, 好处2等等。
我这样做的方法是让所有成员回复并将其放入@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条记录然后突然结束,有时会给出“内存输出”错误。
我有以下循环。
@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'
答案 0 :(得分: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。
答案 1 :(得分: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'