if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_test]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_test]
GOCREATE PROCEDURE dbo.sp_test
     @p1       varchar(50)=null,
     @p2      varchar(30)=null,
     @p3        varchar(30)=null
AS 
  DECLARE
     @sql            varchar(5000)
BEGIN
  SET @sql = 
    ' SELECT  *
      FROM  testTable a
      WHERE 1=1 
    '  IF (@p1 IS NOT NULL)
  BEGIN
    SET @sql = @sql
        + ' AND a.field1=''' + @p1 + ''' '
  END
  IF (@p2 IS NOT NULL)
  BEGIN
    SET @sql = @sql
        + ' AND a.field2<=''' + @p2 + ''' '
  END
  IF (@p3 IS NOT NULL)
  BEGIN
    SET @sql = @sql
        + ' AND a.field3=''' + CONVERT(VARCHAR(10), @p3, 101) + ''' '  
  END
    
  PRINT(@sql)
  EXECUTE(@sql)
 
END
GO

解决方案 »

  1.   

    /*
    生成组合条件的存储过程
    */
    --创建得到组合条件的存储过程
    create procedure test
     @fd1 varchar(100),@value1 varchar(100)
    ,@fd2 varchar(100),@value2 varchar(100)
    ,@fd3 varchar(100),@value3 varchar(100)
    ,@fd4 varchar(100),@value4 varchar(100)
    ,@tj varchar(1000) output
    as
    select @tj='',@tj=@tj
        +case isnull(@value1,'') when '' then ''
              else ' and ['+@fd1+']='''+@value1+'''' end
        +case isnull(@value2,'') when '' then ''
              else ' and ['+@fd2+']='''+@value2+'''' end
        +case isnull(@value3,'') when '' then ''
              else ' and ['+@fd3+']='''+@value3+'''' end
        +case isnull(@value4,'') when '' then '' 
              else ' and ['+@fd4+']='''+@value4+'''' end
    if @tj<>'' 
       set @tj=' where '+right(@tj,len(@tj)-5)
    go--测试
    declare @tj varchar(1000)
    exec test '姓名','李XX'
       ,'职务',''
     ,'性别','男'
       ,'学历','本科'
     ,@tj output
    print @tjgo
    drop procedure test
      

  2.   

    select @tj='',@tj=@tj
        +case isnull(@value1,'') when '' then ''
              else ' and ['+@fd1+']='''+@value1+'''' end
    什么意思 不懂
    讲解一下 谢谢
      

  3.   

    在前台判断一下给出哪个字段,瑞组织一下你的SQL语句,不一定要用楼上两位所说的存储的.
      

  4.   

    select @tj='',@tj=@tj
    什么意思?
      

  5.   

    select @tj='',  --给@tj赋初始值
     @tj=@tj        --@tj与后面的语句是一个整体
     +
      

  6.   

    CrazyFor(冬眠的鼹鼠) 方法灵活,实用,简单
      

  7.   

    我得出来的@tj是一个语句是对的
    但是我怎么把它与select 联系起来的
    如何使用它
      

  8.   

    如何从一个表里查呢
    from语句加在哪里
      

  9.   

    还有set @tj=' where '+right(@tj,len(@tj)-5)什么意思