由於許多人問我想要達到什麼 - 這是一個解釋。在SQL中循環突然停止(跳出memeory)
我必須向Benfits運營商提供文件提要。文件格式爲 Member1 Record, Benefits1記錄, Benefits2記錄等。 Member2記錄, Benefits1, Benefits2等等。
我這樣做的方式是獲得所有成員的reords,並把它放在@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'未打印。
但是這只是偶爾發生。有時循環完全執行,並打印「退出循環」
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'
你從正在拍攝*在手術過程中發生的任何*錯誤消息的環境中運行,這是否正確?涉及的表是否被其他程序同時主動修改,可能導致某種競爭條件? – mellamokb
我實際上正在爲福利承運人撰寫一份檔案。現在,我只是在生產環境中進行測試 - 但是沒有其他方法正在運行。事實上,在此之前我有另一個類似的循環,它的工作原理很完美 – stackuser
不應該要求從@ tempCounttable而不是'MAX'選擇@count = COUNT(idx)嗎? – Kermit