请教一个问题:我想写一个多条件查询的存储过程,有多个参数为条件,用户可能输入其中的几个(不一定是全部)条件,如果在delphi中可以用拼接sql语句的方法(如果用户不输入参数则不加那个and 语句)在sql server中可不可以用这种方法写存储过程,如果可以的话该怎么写?如果不行的话有什么方法可以解决?谢谢!

解决方案 »

  1.   

    前一阵帮人写的毕业设计
    /********************************************************************************************/
    /* PROCEDURE: xcx_tsqk 图书情况查询                                                         */
    /********************************************************************************************/
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[xcx_tsqk]') 
      and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[xcx_tsqk]
    GOcreate procedure xcx_tsqk
    @mtsmc varchar(50) = null,
    @mcbs varchar(50) = null,
    @mdj money = null
    as
    declare
    @sql varchar(1000)
    begin
    if (@mtsmc is null and @mcbs is null and @mdj is null)
    begin
    print '图书名称、出版社和单价必需输入一项!'
    return
    end set @sql = 'select 图书代码 = tsdm04, 图书名称 = tsmc04, 出版社 = cbs04, 单价 = dj04 '
        set @sql = @sql + 'from tsqk where 1 = 1 '
    if (@mtsmc is not null) 
    begin
    set @sql = @sql + 'and tsmc04 like ''%'' + ''' + @mtsmc + ''' + ''%'' '
    end if (@mcbs is not null)
    begin
    set @sql = @sql + 'and cbs04 like ''%'' + ''' + @mcbs + ''' + ''%'' '
    end if (@mdj is not null)
    begin
    set @sql = @sql + 'and dj04 = ' + convert(varchar(20), @mdj)
    end

    execute(@sql)
    end
    GO
      

  2.   

    CREATE PROCEDURE querydata
    @wherestr varchar(8000)
     AS
    exec('select*from table1  where '+@wherestr)
    GO