sql select query在存储过程中不起作用

时间:2013-12-04 05:46:59

标签: sql-server stored-procedures

在我的项目中,我在下面的存储过程中编写了一个SQL查询。

select 
    HostID, HostUniqueID,
    (RegFirstName+' '+ RegLastName) as RegistrantName,
    (CoRegFirstName+' '+ CoRegLastName) as CoRegistrantName, 
    EventType,    
    convert(varchar, EventDate, 101) as EventDate,
    Emailid 
from 
    tbl_HostDtls 
where 
    Del_sw = 'N' 
    and RegFirstName like'%'+ @Hostfirstname +'%' 
    and RegLastName like '%'+ @hostlastname +'%' 
    or CoRegFirstName like'%'+ @Hostfirstname  +'%' 
    and CoRegLastName like '%'+ @Hostfirstname  +'%'

我在上述查询中发送了两个参数:@Hostfirstname@hostlastname

查询中Del_sw='N'表示不删除记录。

如果用户想要根据注册表的名字和姓氏获取数据,那么用户可以完美地获取未删除的数据。

其他用户希望根据co_registry名字和姓氏获取数据“和”条件不起作用,这意味着此查询也会抓取已删除的记录(不考虑Del_sw='N'条件)

注意:删除的记录也存储在我的数据库中。

2 个答案:

答案 0 :(得分:1)

正确使用括号将您的条件封装在WHERE子句

where Del_sw='N' and ( (RegFirstName like'%'+ @Hostfirstname +'%' and RegLastName like '%'+ @hostlastname +'%' ) or (CoRegFirstName like'%'+ @Hostfirstname +'%' and CoRegLastName like '%'+ @Hostfirstname +'%') )

由于您只想从未删除的记录中搜索,因此在指定未删除的记录条件后,在单对括号中捕获其余条件。

答案 1 :(得分:1)

Select HostID,
  HostUniqueID,
  (RegFirstName+' '+ RegLastName) as RegistrantName,
  (CoRegFirstName+' '+CoRegLastName) as CoRegistrantName,
  EventType,
  convert(varchar,EventDate,101) as EventDate,
  Emailid
 from tbl_HostDtls
 where Del_sw='N' and
 ((RegFirstName like'%'+ @Hostfirstname +'%' 
 and RegLastName like '%'+ @hostlastname +'%') 
 or  (CoRegFirstName like'%'+ @Hostfirstname  +'%' 
 and CoRegLastName like '%'+ @Hostfirstname  +'%'))