set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER proc [dbo].[Search]
@ZoneNo nvarchar(50),@ZoneName nvarchar(50)
asdeclare @Sql varchar(1000)
set @Sql=' 1=1 '
if(@ZoneNo<>'')
  set @Sql=@Sql+' and no='+@ZoneNo 
if(@ZoneName<>'')
  set @Sql=@Sql+'and names like '+@ZoneNameset @Sql = 'select * from Zone where '+@Sqlexec(@Sql)下面是执行的declare @ZoneNo varchar(50),@ZoneName varchar(50)
exec Search  @ZoneNo='' , @ZoneName='ss'前面设置ZoneNo有值ZoneName空的时候可以执行
但是现在这样设置总是报列名 'ss' 无效。
还请大家帮帮忙 !!

解决方案 »

  1.   

    --这样试试
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER proc [dbo].[Search]
    @ZoneNo nvarchar(50),@ZoneName nvarchar(50)
    asdeclare @Sql varchar(1000)
    set @Sql=' 1=1 '
    if(@ZoneNo<>'')
      set @Sql=@Sql+' and no='+@ZoneNo  
    if(@ZoneName<>'')
      set @Sql=@Sql+'and names like '''+@ZoneName+''''set @Sql = 'select * from Zone where '+@Sqlexec(@Sql)
      

  2.   

    set @Sql=@Sql+'and names like '+@ZoneName
    这句话应该写成set @Sql=@Sql+'and names like ‘'+@ZoneName+'''
      

  3.   

    你print出来看看错误在哪里。
      

  4.   

     set @Sql=@Sql+'and names like '+@ZoneName改成下面那句 set @Sql=@Sql+'and names like ''%'+@ZoneName + '%'''