要求:
一个典型的多条件不定项查询.
1.为了安全,只能使用存储过程.
2.每一个参数都可能不输入.表部分结构
ID  int
商品名字 nvarchar
型号     nvarchar
商品类别 int
商品价格1 decimal(18,2)   --这个是为了自动4舍5入,所以没有用money类型
商品价格2 decimal(18,2)   --这个是为了自动4舍5入,所以没有用money类型除了ID不是查询条件外,别的5项都是查询条件.可能查询条件是一项都没有(那就返回全部,等同select * from table1),也可能有N个查询参数(-1<N<6)能不能做一个存储过程.把这5个参数都做成输入参数来查询.
请各位高手赐教

解决方案 »

  1.   

    Create ProceDure SP_Search(@Col2 nvarchar(50)=Null,@Col3 nvarchar(50)=Null,@Col4 int=Null,@Col5 decimal(18,2)=Null,@Col6 decimal(18,2)=Null)
    As
    Begin
    Declare @S Varchar(1000)
    Select @S='select * from table1 Where 1=1'
    If @Col2 Is Not Null
    Select @S=@S+'  And 商品名字='''+@Col2+''''
    If @Col3 Is Not Null
    Select @S=@S+'  And 型号='''+@Col3+''''
    If @Col4 Is Not Null
    Select @S=@S+'  And 商品类别='+Rtrim(@Col4)
    If @Col5 Is Not Null
    Select @S=@S+'  And 商品价格1='+Rtrim(@Col5)
    If @Col6 Is Not Null
    Select @S=@S+'  And 商品价格2='+Rtrim(@Col6)
    EXEC(@S)
    End
    GO
    --執行的時候可以不加參數,也可以加任意的參數
    EXEC SP_Search
    EXEC SP_Search 'aa','dd'
    EXEC SP_Search Default,'27'
      

  2.   

    paoluo(一天到晚游泳的鱼) 的这种不行.100%不安全!
    我就是为了防止被人注入,才要求用存储过程的.
    要是用这种拼SQL的方法的话,我直接在C#中做更方便
      

  3.   

    http://community.csdn.net/Expert/topic/4883/4883290.xml?temp=.3933222
    楼主,上次也好象是你问的啊   :)
      

  4.   

    ajqc(一条做着"家"的梦的黄牛) ( ) 信誉:100  2006-07-25 17:50:00  得分: 0  
     
     
       paoluo(一天到晚游泳的鱼) 的这种不行.100%不安全!
    我就是为了防止被人注入,才要求用存储过程的.
    要是用这种拼SQL的方法的话,我直接在C#中做更方便
      
     
    -----------------------------------
    你在前台用戶輸入的時候,檢查用戶是否輸入了單引號,如果有輸入,就給出錯誤提示。
      

  5.   

    要防SQL注入,过滤输入参数即可了,去掉<>= like
      

  6.   

    同意鱼兄!在前台必须对用户输入内容的有效性进行验证!避免出入单引号,or,--等常见的问题就是 ' or 1=1 Drop Table table1 --
      

  7.   

    Try:
    create proc sp_search @spmz varchar(20),
          @xh   varchar(20),
          @splb int,
          @spjg1  decimal(18,2),
          @spjg2  decimal(18,2)
    as
    begin 
    exec(' select * from tab where spmz like ''' + isnull(@spmz,'') + '%'' ' +
    ' and xh like ''' + isnull(@xh,'') + '%'' and splb like ''' + cast(@splb as varchar(20)) + '%'' and ' +
    'spjg2 like ''' + cast(isnull(@spjg1,'') as varchar(20)) + '%'' and ' 
    'spjg2 like ''' + cast(isnull(@spjg2,'') as varchar(20)) + '%''  ' ) end