我在搞查询模块,调用存储过程来实现组合查询,代码如下:
declare @ID intif isnull(@鉴定获得人,'') !=''
select @ID =[鉴定ID] from [鉴定获得人表] where 人员ID in (select ID from [人员信息表] where [姓名] like '%'+isnull(@鉴定获得人,'')+'%')
else
set @ID = 0

SELECT [ID], [鉴定编号], [鉴定级别], [状态], [成果水平], [鉴定登记号] FROM [鉴定表]
 where (case isnull(@鉴定编号,'') when '' then '' else 鉴定编号end)=isnull(@鉴定编号,'') 
 
  and (case isnull(@鉴定登记号,'') when '' then '' else 鉴定登记号end)=isnull(@鉴定登记号,'')
  
  and (case isnull(@鉴定获得人,'') when '' then '' else ID end)=@ID
  
  and (case isnull(@鉴定级别,'') when '' then '' else 鉴定级别end)=isnull(@鉴定级别,'')
  
  and (case isnull(@鉴定形式,'') when '' then '' else 鉴定形式end)=isnull(@鉴定形式,'')
  
  and (case isnull(@成果水平,'') when '' then '' else 成果水平end)=isnull(@成果水平,'')
  
  and (case isnull(@鉴定日期,'') when '' then '' else 鉴定日期end) like '%'+isnull(@鉴定日期,'')+'%'
  
RETURN
遇到了个很头疼的问题,我通过给ID赋值来查找记录,但是根据人名来查找的话,该ID值只有一个,不能查找到多条记录,假如那个人获得 了多个鉴定,我该怎么办?用我的方法不能实现查找出那个人获得的所有鉴定记录啊
我的思路通过输入的人名去人员表找到该人的ID,然后到鉴定人员表,获得与之匹配的鉴定ID】,该ID就是鉴定表里的ID,即为所要的,问题出来了,与那个人的ID匹配的鉴定ID可以有多个,但却只能赋一个值,怎么办啊??5555555555555555

解决方案 »

  1.   

    建议用c#代码里实现组合查询,如果一定要用存储过程,请去SQL SERVER版问问
      

  2.   

    SELECT a.[ID], a.[鉴定编号], a.[鉴定级别], a.[状态], a.[成果水平], a.[鉴定登记号] 
    FROM [鉴定表] a
      JOIN [鉴定获得人表] b ON b.[鉴定ID]=a.[ID]
      JOIN [人员信息表]   c ON c.[ID]=b.[人员ID]
    WHERE c.[姓名] like '%'+isnull(@鉴定获得人,'')+'%' 
      and a.[鉴定编号]=@鉴定编号
      and a.[鉴定登记号]=@鉴定登记号
      and a.[鉴定级别]=@鉴定级别
      and a.[鉴定形式]=@鉴定形式 
      and a.[成果水平]=@成果水平 
      and a.[鉴定日期]=@鉴定日期  
      

  3.   

    存储过程设计的问题根据字段设计来看,ID和鉴定编号是唯一的,[获得人][鉴定级别][状态][成果水平][鉴定日期]逻辑上都是一样的如果想通过[获得人]达到参数输入查询,注定是有问题的,一个人可能只获得几项鉴定,但是也有可能获得10000项,那样你的参数输入策略就会彻底失败无论通过再查ID,还是再查鉴定编号都不能绕过去,通过[获得人]只能查出所有获得人为“李四”的所有记录。如果你想让某个“李四”查到自己的记录,如果他不知道ID或者鉴定编号,他不可能获得唯一性的结果,到头来都要人工判断。
    一句话,如果提供数据库唯一性字段的信息就会得到唯一记录,否则都是符合条件的记录集,再多条件也是一样,无法绕过去。
      

  4.   

    SELECT a.[ID], a.[鉴定编号], a.[鉴定级别], a.[状态], a.[成果水平], a.[鉴定登记号] 
    FROM [鉴定表] a
      JOIN [鉴定获得人表] b ON b.[鉴定ID]=a.[ID]
      JOIN [人员信息表]   c ON c.[ID]=b.[人员ID]
    WHERE c.[姓名] like '%'+isnull(@鉴定获得人,'')+'%' 
      and (case isnull(@鉴定编号,'') when '' then '' else a.鉴定编号 end)=isnull(@鉴定编号,'') 
      and (case isnull(@鉴定登记号,'') when '' then '' else a.鉴定登记号 end)=isnull(@鉴定登记号,'') 
      and (case isnull(@鉴定级别,'') when '' then '' else a.鉴定级别 end)=isnull(@鉴定级别,'') 
      and (case isnull(@鉴定形式,'') when '' then '' else a.鉴定形式 end)=isnull(@鉴定形式,'') 
      and (case isnull(@成果水平,'') when '' then '' else a.成果水平 end)=isnull(@成果水平,'') 
      and (case isnull(@鉴定日期,'') when '' then '' else a.鉴定日期 end) like '%'+isnull(@鉴定日期,'')+'%'