create procedure p 
@searchText  varchar(20)=null,
@Email    varchar(20)=null,
@mobile   varchar(20)=null,
@_phone   varchar(20)=null,
@Address  varchar(20)=null,
@_zip     varchar(20)=null
asSELECT ID
       , [UserName]
       , RealName
       , Phone
       , Mobile
       , Zip
       , Address
       , Email
       , Mark
FROM Account 
WHERE UserName like '%'+ISNULL(@searchText,'')+'%'
      and
      Email like '%'+ISNULL(@Email,'')+'%'
      and
      Mobile like '%'+ISNULL(@mobile,'')+'%'
      and
      Phone like '%'+ISNULL(@_phone,'')+'%'
      and
      Address like '%'+ISNULL(@Address,'')+'%'
      and
      Zip like '%'+ISNULL(@_zip,'')+'%'

解决方案 »

  1.   

    if (@searchText <> '')
    SET @_Search = ' UserName like %' + @searchText + '%'
    if ( @Email <> ''  )
    SET @_Search = ' and Email  like %' + @Email + '%'
    if (  @mobile <> ''      )
    SET @_Search =  ' and Mobile like %' + @mobile + '%'
    if( @_phone <> '' )
    SET  @_Search =  ' and Phone like %' + @phone + '%'
    if (    @Address  <> ''    )
    SET @_Search =  ' and Address like %' + @Address + '%'
    if(      @_zip <> '' )
    SET @_Search =  ' and like %' + @zip + '%'
    declare @s as varchar(2000)
    set @s='SELECT ID, [UserName], RealName,Phone,Mobile,Zip,Address,Email,Mark FROM Account'
    set @s=@s+' where '+rtirm(@_Search)
    exec(@s)
      

  2.   

    可以拼语句,我认为用这么多like不如拼语句合适
      

  3.   

    我也偏向用拼接字串不过,如果可以接受like,就直接不管为不为空,都like,因为假如like '%%',相当于是找出所有语句就是确定的为了效率,还是用动态拼接字串,然后执行sql
      

  4.   

    if (@searchText <> '')
    SET @_Search = ' and UserName like %' + @searchText + '%'
    if ( @Email <> ''  )
    SET @_Search = ' and Email  like %' + @Email + '%'
    if (  @mobile <> ''      )
    SET @_Search =  ' and Mobile like %' + @mobile + '%'
    if( @_phone <> '' )
    SET  @_Search =  ' and Phone like %' + @phone + '%'
    if (    @Address  <> ''    )
    SET @_Search =  ' and Address like %' + @Address + '%'
    if(      @_zip <> '' )
    SET @_Search =  ' and like %' + @zip + '%'
    --   SET @_name = '%' + @searchText + '%'
     --  SET @_email = '%' + @Email + '%'
      -- SET @_mobile = '%' + @mobile + '%'
       --SET @_phone = '%' + @phone + '%'
       --SET @_Address = '%' + @Address + '%'
       --SET @_zip = '%' + @zip + '%'    exec('INSERT INTO #SearchResultsTempTable (CustomerID, [UserName], RealName,Phone ,Mobile,Zip,Address,Email,Mark)    SELECT ID, [UserName], RealName,Phone,Mobile,Zip,Address,Email,Mark
        FROM Account 
    where 1=1 '+@_search)
      

  5.   

    如果是INT类型的
    @参数 as int
    exec ('select * from 表名 where ID='+@参数)
    如果是VARCHAR类型的
    @参数 as int
    exec ('select * from 表名 where ID=''+@参数+''')
    直接通过程序给SQL参数就可以,不明白为什么用这么多的IF来判断
      

  6.   

    if (@searchText <> '')
    SET @_Search = ' and UserName like %' + @searchText + '%'
    if ( @Email <> ''  )
    SET @_Search = ' and Email  like %' + @Email + '%'
    if (  @mobile <> ''      )
    SET @_Search =  ' and Mobile like %' + @mobile + '%'
    if( @_phone <> '' )
    SET  @_Search =  ' and Phone like %' + @phone + '%'
    if (    @Address  <> ''    )
    SET @_Search =  ' and Address like %' + @Address + '%'
    if(      @_zip <> '' )
    SET @_Search =  ' and like %' + @zip + '%'
    declare @s as varchar(2000)
    set @s='SELECT ID, [UserName], RealName,Phone,Mobile,Zip,Address,Email,Mark FROM Account where 1=1'
    set @s=@s+rtirm(@_Search)
    exec(@s)
      

  7.   

    也可以吧所有的条件用如下格式写:
    insert into ...
    select ....
    from ....
    where 
    UserName like (case @searchText when '' then username else '%'+ @searchText +'%' end)
    and
    Email  like (case @Email  when '' then Email  else '%'+ @Email  +'%' end)
    and 
    其他的条件.
    以上是所有条件.