要求:
一个典型的多条件不定项查询.
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.为了安全,只能使用存储过程.
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个参数都做成输入参数来查询.
请各位高手赐教
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'
我就是为了防止被人注入,才要求用存储过程的.
要是用这种拼SQL的方法的话,我直接在C#中做更方便
楼主,上次也好象是你问的啊 :)
paoluo(一天到晚游泳的鱼) 的这种不行.100%不安全!
我就是为了防止被人注入,才要求用存储过程的.
要是用这种拼SQL的方法的话,我直接在C#中做更方便
-----------------------------------
你在前台用戶輸入的時候,檢查用戶是否輸入了單引號,如果有輸入,就給出錯誤提示。
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