需求内容描述:
为了帮助客户更好地管理样本,快速地了解样本信息的存储情况,使用情况,能够方便地进行样本信息的登记、使用、(多条件下的组合)查询(样本信息、出库信息)、修改、删除、打印、导出(可选择导出至Excel中)等功能,另外需具备软件使用授权(通过登录、权限管理)。
样本的仓储结构:设备级(一级,即顶级),设备下可以进行分区(二级,譬如:A设备分为1,2,3,4区),分区下可以多个提桶(三级,譬如:1分区下有1,2,3号提桶),提桶下又可以进行分层(四级,譬如:1号提桶分为1,2,3,4,5,6,7,8,9层),分层下划分为很多格子(五级,譬如1层下分为“1”号,“2”号,“3”号,“4”号,“5”号,“6”号,“7”号,“8”号,“9”号,“10”号,“11”号,“12”号,“13”号,“14”号,“15”号,“16”号,“17”号,“18”号,“19”号,“20”号的格子),样本最终是存放在格子中的。
样本查询部分直接上图,查询界面图的截图如下,
查询的MSSQL存储过程的代码如下:
CREATE PROCEDURE [dbo].[usp_样本_查_由复杂条件] -- Add the parameters for the stored procedure here @样本编号 varchar(12), @门诊号 varchar(50), @住院号 varchar(50), @姓名 varchar(20), @身份证号 varchar(18), @采血量下限 int, @采血量上限 int, @剩余量下限 int, @剩余量上限 int, @设备ID int, @分区ID int, @提桶ID int, @分层ID int, @科室ID int, @血型ID int, @采集时间选择 bit, @短时间格式 bit, @开始时间 datetime, @结束时间 datetime, @升序排列 bit, @样本数据类型 int, @开始记录索引 int, @结束记录索引 int AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here declare @strSQL varchar(5000) -- 主语句 declare @pageSize int if (@样本编号 IS NOT NULL AND LEN(@样本编号) > 0) begin set @strSQL = 'select 样本.ID,样本编号,门诊号,住院号,姓名,身份证号,血型ID,血型名称,采血量,剩余量,采集时间,添加时间,使用中,物品类别ID,物品类别名称,部门ID,部门名称,分层格子ID,格子编号,分层ID,分层编号,提桶ID,提桶编号,分区ID,分区编号,设备ID,设备编号,操作者ID,用户姓名 from 样本 join 血型 on 血型.ID=血型ID join 部门 on 部门.ID=部门ID join 用户 on 用户.ID=操作者ID join 物品类别 on 物品类别.ID=物品类别ID join 分层格子 on 分层格子.ID=分层格子ID join 提桶分层 on 提桶分层.ID=分层ID join 分区提桶 on 分区提桶.ID=提桶ID join 设备分区 on 设备分区.ID=分区ID join 设备 on 设备.ID=设备ID where 样本编号 like ''%' +@样本编号 + '%''' end else if(@门诊号 IS NOT NULL AND LEN(@门诊号) > 0) begin set @strSQL = 'select 样本.ID,样本编号,门诊号,住院号,姓名,身份证号,血型ID,血型名称,采血量,剩余量,采集时间,添加时间,使用中,物品类别ID,物品类别名称,部门ID,部门名称,分层格子ID,格子编号,分层ID,分层编号,提桶ID,提桶编号,分区ID,分区编号,设备ID,设备编号,操作者ID,用户姓名 from 样本 join 血型 on 血型.ID=血型ID join 部门 on 部门.ID=部门ID join 用户 on 用户.ID=操作者ID join 物品类别 on 物品类别.ID=物品类别ID join 分层格子 on 分层格子.ID=分层格子ID join 提桶分层 on 提桶分层.ID=分层ID join 分区提桶 on 分区提桶.ID=提桶ID join 设备分区 on 设备分区.ID=分区ID join 设备 on 设备.ID=设备ID where 门诊号 like ''%' +@门诊号 + '%''' end else if(@住院号 IS NOT NULL AND LEN(@住院号) > 0) begin set @strSQL = 'select 样本.ID,样本编号,门诊号,住院号,姓名,身份证号,血型ID,血型名称,采血量,剩余量,采集时间,添加时间,使用中,物品类别ID,物品类别名称,部门ID,部门名称,分层格子ID,格子编号,分层ID,分层编号,提桶ID,提桶编号,分区ID,分区编号,设备ID,设备编号,操作者ID,用户姓名 from 样本 join 血型 on 血型.ID=血型ID join 部门 on 部门.ID=部门ID join 用户 on 用户.ID=操作者ID join 物品类别 on 物品类别.ID=物品类别ID join 分层格子 on 分层格子.ID=分层格子ID join 提桶分层 on 提桶分层.ID=分层ID join 分区提桶 on 分区提桶.ID=提桶ID join 设备分区 on 设备分区.ID=分区ID join 设备 on 设备.ID=设备ID where 住院号 like ''%' +@住院号 + '%''' end else if(@姓名 IS NOT NULL AND LEN(@姓名) > 0) begin set @strSQL = 'select 样本.ID,样本编号,门诊号,住院号,姓名,身份证号,血型ID,血型名称,采血量,剩余量,采集时间,添加时间,使用中,物品类别ID,物品类别名称,部门ID,部门名称,分层格子ID,格子编号,分层ID,分层编号,提桶ID,提桶编号,分区ID,分区编号,设备ID,设备编号,操作者ID,用户姓名 from 样本 join 血型 on 血型.ID=血型ID join 部门 on 部门.ID=部门ID join 用户 on 用户.ID=操作者ID join 物品类别 on 物品类别.ID=物品类别ID join 分层格子 on 分层格子.ID=分层格子ID join 提桶分层 on 提桶分层.ID=分层ID join 分区提桶 on 分区提桶.ID=提桶ID join 设备分区 on 设备分区.ID=分区ID join 设备 on 设备.ID=设备ID where 姓名 like ''%' +@姓名 + '%''' end else if(@身份证号 IS NOT NULL AND LEN(@身份证号) > 0) begin set @strSQL = 'select 样本.ID,样本编号,门诊号,住院号,姓名,身份证号,血型ID,血型名称,采血量,剩余量,采集时间,添加时间,使用中,物品类别ID,物品类别名称,部门ID,部门名称,分层格子ID,格子编号,分层ID,分层编号,提桶ID,提桶编号,分区ID,分区编号,设备ID,设备编号,操作者ID,用户姓名 from 样本 join 血型 on 血型.ID=血型ID join 部门 on 部门.ID=部门ID join 用户 on 用户.ID=操作者ID join 物品类别 on 物品类别.ID=物品类别ID join 分层格子 on 分层格子.ID=分层格子ID join 提桶分层 on 提桶分层.ID=分层ID join 分区提桶 on 分区提桶.ID=提桶ID join 设备分区 on 设备分区.ID=分区ID join 设备 on 设备.ID=设备ID where 身份证号 like ''%' +@身份证号 + '%''' end else if(@采血量下限 <> -1) begin set @strSQL = 'select 样本.ID,样本编号,门诊号,住院号,姓名,身份证号,血型ID,血型名称,采血量,剩余量,采集时间,添加时间,使用中,物品类别ID,物品类别名称,部门ID,部门名称,分层格子ID,格子编号,分层ID,分层编号,提桶ID,提桶编号,分区ID,分区编号,设备ID,设备编号,操作者ID,用户姓名 from 样本 join 血型 on 血型.ID=血型ID join 部门 on 部门.ID=部门ID join 用户 on 用户.ID=操作者ID join 物品类别 on 物品类别.ID=物品类别ID join 分层格子 on 分层格子.ID=分层格子ID join 提桶分层 on 提桶分层.ID=分层ID join 分区提桶 on 分区提桶.ID=提桶ID join 设备分区 on 设备分区.ID=分区ID join 设备 on 设备.ID=设备ID where 采血量 between '+str(@采血量下限)+' and '+str(@采血量上限) end else if(@剩余量下限 <> -1) begin set @strSQL = 'select 样本.ID,样本编号,门诊号,住院号,姓名,身份证号,血型ID,血型名称,采血量,剩余量,采集时间,添加时间,使用中,物品类别ID,物品类别名称,部门ID,部门名称,分层格子ID,格子编号,分层ID,分层编号,提桶ID,提桶编号,分区ID,分区编号,设备ID,设备编号,操作者ID,用户姓名 from 样本 join 血型 on 血型.ID=血型ID join 部门 on 部门.ID=部门ID join 用户 on 用户.ID=操作者ID join 物品类别 on 物品类别.ID=物品类别ID join 分层格子 on 分层格子.ID=分层格子ID join 提桶分层 on 提桶分层.ID=分层ID join 分区提桶 on 分区提桶.ID=提桶ID join 设备分区 on 设备分区.ID=分区ID join 设备 on 设备.ID=设备ID where 剩余量 between '+str(@剩余量下限)+' and '+str(@剩余量上限) end else begin set @strSQL = 'select 样本.ID,样本编号,门诊号,住院号,姓名,身份证号,血型ID,血型名称,采血量,剩余量,采集时间,添加时间,使用中,物品类别ID,物品类别名称,部门ID,部门名称,分层格子ID,格子编号,分层ID,分层编号,提桶ID,提桶编号,分区ID,分区编号,设备ID,设备编号,操作者ID,用户姓名 from 样本 join 血型 on 血型.ID=血型ID join 部门 on 部门.ID=部门ID join 用户 on 用户.ID=操作者ID join 物品类别 on 物品类别.ID=物品类别ID join 分层格子 on 分层格子.ID=分层格子ID join 提桶分层 on 提桶分层.ID=分层ID join 分区提桶 on 分区提桶.ID=提桶ID join 设备分区 on 设备分区.ID=分区ID join 设备 on 设备.ID=设备ID' end if (@设备ID = -1) begin set @strSQL = 'select * from ('+ @strSQL +') as 样本1 where 1=1' end else if(@分区ID = -1) begin set @strSQL = 'select * from ('+ @strSQL +') as 样本1 where 设备ID='+CAST(@设备ID AS VARCHAR(3)) end else if(@提桶ID = -1) begin set @strSQL = 'select * from ('+ @strSQL +') as 样本1 where 分区ID='+CAST(@分区ID AS VARCHAR(5)) end else if(@分层ID = -1) begin set @strSQL = 'select * from ('+ @strSQL +') as 样本1 where 提桶ID='+CAST(@提桶ID AS VARCHAR(7)) end else begin set @strSQL = 'select * from ('+ @strSQL +') as 样本1 where 分层ID='+CAST(@分层ID AS VARCHAR(7)) end if (@科室ID <> -1) begin set @strSQL = @strSQL + ' and 部门ID='+CAST(@科室ID AS VARCHAR(3)) end if (@血型ID <> -1) begin set @strSQL = @strSQL + ' and 血型ID='+CAST(@血型ID AS VARCHAR(3)) end if (@采集时间选择 = 1) begin if (@短时间格式 = 1) begin set @strSQL = @strSQL + ' and 采集时间 between '''+convert(varchar(19),@开始时间,120)+''' and '''+convert(varchar(19),DATEADD(SECOND,-1,DATEADD(day,1,@结束时间)),120)+'''' end else begin set @strSQL = @strSQL + ' and 采集时间 between '''+convert(varchar(19),@开始时间,120)+''' and '''+convert(varchar(19),@结束时间,120)+'''' end end if (@样本数据类型 = 1) begin set @strSQL = @strSQL + ' and 使用中=1' end else if(@样本数据类型 = -1) begin set @strSQL = @strSQL + ' and 使用中=0' end set @strSQL = '('+ @strSQL +') as 样本2' set @pageSize=@结束记录索引-@开始记录索引; if @开始记录索引=0 begin if @升序排列=1 begin set @strSQL = 'select top '+str(@pageSize)+' * from '+@strSQL+' order by ID'; end else begin set @strSQL = 'select top '+str(@pageSize)+' * from '+@strSQL+' order by ID desc'; end end else begin if @升序排列=1 begin set @strSQL = 'select top '+str(@pageSize)+' * from '+@strSQL+' where ID>(select max(ID) from (select top '+str(@开始记录索引)+' ID from '+@strSQL+' order by ID) as 样本3) order by ID'; end else begin set @strSQL = 'select top '+str(@pageSize)+' * from '+@strSQL+' where ID<(select min(ID) from (select top '+str(@开始记录索引)+' ID from '+@strSQL+' order by ID desc) as 样本3) order by ID desc '; end end --print @strSQL exec (@strSQL) END GO