- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用游标实现体检人员检查-检验数据更新
利用游标实现体检人员检查\检验数据更新【摘要】:在SQLSERVER数据库中,当需要对某一单位体检人员结果集中的记录逐一地读取并完成更新检查检验数据时,使用select语句完成十分困难,而游标则提供了完成对一个结果集进行逐行处理的能力。
【关键词】SELECT;CURSOR游标 ;结果集;体检;检查检验
一、问题提出
我院的体检系统由于上线时间较早,体检人员的体检结果导出功能方面功能不足,因此当有些查体单位需要我们提供该单位所有人员的检查、检验等数据时,导致这些数据往往无法直接提供或提供这些数据十分麻烦。
二、解决思路
由于我院体检人员的检查、检验数据在数据库中是一个项目名称对应一个结果并以一条记录形式存储的,而体检单位要求在一张电子表格中要包含所有体检人员的所有的检查、检验项目结果,于是在编写存储过程中,当检索、更新的数据是一条记录时,使用select 、update语句可以实现,但是现在需要从体检人员结果集中逐一地读取一条记录并更新,那么使用select语句完成十分困难。通过分析研究,发现利用游标可以方便实现。
什么游标(CURSOR)?其作用是什么?
游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。我们知道关系数据库管理系统实质是面向集合的,在SQLSERVER中并没有一种描述表中单一记录的表达形式,除非使用where 子句来限制只有一条记录被选中,因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力。
每一个游标必须有四个组成部分,这四个部分必须符合下面的顺序:①DECLARE 游标②OPEN 游标③FETCH 信息④CLOSE 或DEALLOCATE 游标。
三、具体实现步骤:
1、生成一个包含体检人员的基本信息字段和所有检查、检验项目字段的空数据表。
体检人员的基本信息字段包括如体检编号、姓名、性别,体检时间等;检查项目字段分别包括检查部位和检查结果,如放射、超声、心电图等;检验项目字段包括总胆红素、直接胆红素、间接胆红素等57个项目。
由于每个检查、检验项目在数据库是以一个项目名称对应一个结果并以一条记录的形式保存,因此为生成所有项目字段,首先通过select语句检索出所有项目名称记录并保存到excel中,利用excel的转置功能生成包含所有字段空表,再将该表导入到数据库中,最后生成空的、完整的数据表。
2、将体检人员基本信息插入到dyjj_jcjy中。
insert into dyjj_jcjy(tjbh,ryxh,hzxm,sex,kstjsj)
select a.tjbh,a.xh ‘ryxh’,b.hzxm,b.sex,substring(a.kstjsj,1,8)
from TJ_TJRYK a,SF_BRXXK b
WHERE a.tdxh=‘2623’and a.tjbh=b.blhand a.jlzt=3
order by tjbh
3、通过jc_up_cursor游标将检查结果插入(通过逐条取ryxh’结果集来更新对应数据)
DECLARE @ryxh ut_xh12
DECLARE jc_up_cursor CURSOR FOR
SELECT ryxh FROM dyjj_jcjy
ORDER BY tjbh
OPEN jc_up_cursor
FETCH NEXT FROM jc_up_cursor into @ryxh
WHILE @@FETCH_STATUS = 0
BEGIN
---心电图
update dyjj_jcjy set xdtjcbw=-----部位
(select top 1 xmjg from SF_JCJGK where bgdh=(select bgdh FROM TJ_TJSFMXK where ryxh=@ryxh and bglx=‘XDT’)
and xmdm=‘bw’order by xh desc)
where ryxh=@ryxh
update dyjj_jcjy set xdtjcsj= -----结果
(select top 1 xmjg from SF_JCJGK where bgdh=(select bgdh FROM TJ_TJSFMXK where ryxh=@ryxh and bglx=‘XDT’)
and xmdm=‘jcjl
文档评论(0)