如果要为这样的一个查询编写一个存储过程,查询的条件为2个参数,一个是XM ,一个是TM,这2个参数可能是空值(相当于用户没有选择这个条件),查询应是传入的条件的“与”的关系,这样如何来实现呢?比如说:我只输入一个TM ,查询出是所有符合TM条件的记录,我只输入一个XM,查询出是所有符合XM条件的记录,我要全部输入,就是符合XM和TM 条件的记录。
我写的过程如下:
CREATE Procedure serch_name
(
@v_XM nvarchar(255) =null
@v_TM nvarchar(255) =null)
as 
begin
select top 20  *  from yhxx  where  XM  like  '%' + @v_XM + '%' and TM  like  '%' + @v_TM + '%' 
end
GO

解决方案 »

  1.   

    要用判断啊
      if (@v_XM  is not null and @v_TM is null)
        begin
         语句
       end 
      

  2.   

    我帮你写一个吧
    create proc serch_name
    @v_XM nvarchar(255) =null,@v_TM nvarchar(255) =null
    as
    declare @SQL varchar(400)set @SQL = 'select top 20  *  from yhxx  where 1=1 'if @v_XM <> ''
    begin
    set @SQL=@SQL + 'and XM like ' + @v_XM + '% '
    end
    if @v_TM <> ''
    begin
    set @SQL=@SQL + 'and TM like ' + @v_TM + '%'
    endexec(@SQL)注意空格注意单引号
      

  3.   

    samying() 老大set @SQL=@SQL + 'and XM like ' + @v_XM + '% '是不是有问题呢?怎么查询不出来
      

  4.   

    set @SQL = @SQL + 'and XM like ''' + @v_XM + '''% '
      

  5.   

    samying() 老大 还是查不出来!!!!!!
      

  6.   


    create proc serch_name
    @v_XM nvarchar(255) ,
    @v_TM nvarchar(255)
    as
    begin declare @ifXm char(1)
    declare @ifTm char(1)if @v_xm=''
     set @ifxm=1
    if @v_tm=''
     set @ifvm=2 select * from yhxx where (xm like '%' + @v_xm +'%' or @ifxm=1) 
                         and (tm like '%' + @v_tm +'%' or @iftm=1)