【问题标题】:cursor inside of another cursor not returning correct results另一个游标内的游标没有返回正确的结果
【发布时间】:2012-09-24 18:12:18
【问题描述】:

最近在一个站点,我们有许多丢失的图像,我必须恢复。该站点是一家医院,我能够恢复所有图像并将所有内容放入一个临时表中,其中包括受影响的:遭遇、病历编号、文档和字幕。我现在正在尝试创建一个长文本文件来显示每个受影响的遭遇,如果该遭遇有多个文档,它将显示该遭遇的所有文档。每个受影响的帐户将在文件中以 %%START 开头并以 %%END 结尾。我想要做到这一点,最好做一个游标来对这张表中的遭遇进行排序。然后....光标浏览该遭遇的所有文件以包括该遭遇。我的脚本如下所示:

declare
@name varchar(40),
@mrn varchar(20),
@encounter varchar(20),
@document varchar(30),
@subtitle varchar(30),
@cmd varchar(255),
@count int

declare find_affected cursor for 
select distinct p.name, m.mrn, m.encounter from mck_hpf..missing_documents m
join his..patients p on m.mrn=p.mrn


open find_affected

fetch next from find_affected into @mrn, @name, @encounter while
@@FETCH_STATUS=0

begin
select @mrn = mrn from mck_hpf.dbo.missing_documents where encounter = @encounter
select @name=name from his.dbo.patients where mrn=@mrn
select @encounter = encounter from mck_hpf.dbo.missing_documents where encounter = @encounter
Print '%%START'
Print ''
Print 'Name:               ' + @name
Print 'MRN:                ' + @mrn
Print 'Encounter:          ' + @encounter
Print 'Possible affected documents in this chart:'

declare find_document cursor for 
select distinct(document), subtitle from mck_hpf..missing_documents m
join his..encounters e on e.encounter=m.encounter where @mrn=m.mrn and @encounter=m.encounter

open find_document
fetch next from find_document into @document, @subtitle 
while @@FETCH_STATUS=0
begin
select @document = document from mck_hpf.dbo.missing_documents where encounter = @encounter 
select @subtitle = subtitle from mck_hpf.dbo.missing_documents where encounter = @encounter and document=@document
Print @document + '-' + @subtitle
fetch next from find_document into @document, @subtitle 
end
close find_document
deallocate find_document
Print ''
Print ''
Print '%%END'


fetch next from find_affected into @mrn, @name, @encounter
end
close find_affected
deallocate find_affected
go

脚本运行良好,并且可以正确地循环遇到......但由于某种原因,它不适用于文档。示例....遇到 123 在 missing_documents 表中有 2 个文档让我们说称为 UB04 和 1500....当脚本完成时,而不是说:

Name:               Mickey Mouse                           
MRN:                11111111          
Encounter:          123456789

此图表中可能受影响的文档:

UB04                             
1500

它会说:

Name:               Mickey Mouse                           
MRN:                11111111          
Encounter:          123456789         

此图表中可能受影响的文档:

UB04                             
UB04

就像光标知道有 2 个丢失的文档,但它一遍又一遍地重复找到的第一个文档。 IT 会为所有遭遇执行此操作......如果有 6 个丢失的文档,它会选择第一个并不断重复。

我花了一段时间才达到这一点并让它工作,我只是不知道从哪里开始,因为我认为我的代码看起来是正确的。我在这里搜索但没有找到任何可以帮助我的东西。任何帮助,将不胜感激。谢谢你

【问题讨论】:

    标签: sql cursor


    【解决方案1】:

    您正在重置打印语句正上方的@subtitle。 . .

    select @document = document from mck_hpf.dbo.missing_documents where encounter = @encounter 
    select @subtitle = subtitle from mck_hpf.dbo.missing_documents where encounter = @encounter and document=@document
    Print @document + '-' + @subtitle
    

    如果您想查看第二个光标的值,请在选择之前执行打印

    Print @document + '-' + @subtitle;
    select @document = document from mck_hpf.dbo.missing_documents where encounter = @encounter ;
    select @subtitle = subtitle from mck_hpf.dbo.missing_documents where encounter = @encounter and document=@document;
    

    【讨论】:

    • 戈登....我的一个愚蠢的错误....非常感谢你的第二眼!!!!
    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多