日期:2014-05-17 浏览次数:20710 次
--例,一个存储过程只有两个参数 A,B
--存储过程执行内容
select * from tb where A= and B=
--A,B两个参数可以传递'全部'
--如:当A传递是'全部' 的时候,那么where 条件 A就无效
--那如果这样的话,两个参数都可以传递'全部'那么就有4种情况
A B
1.全部
2. 全部
3.全部 全部
4.
--当第一种参数传递时:
执行select *from tb where B=@B
--当第二种参数传递时:
执行select *from tb where A=@A
--当第三种参数传递时:
执行select *from tb
--当第四种参数传递时:
执行select *from tb where B=@B and B=@B
--这样的话,存储过程使用IF,判断条件就很多,更何况参数不止两个,有木有更好的解决办法呢?
SELECT * FROM [tb]
WHERE A=CASE WHEN @a='all' THEN A ELSE @a END ..
select * from tb
where (ISNULL(@A, '') = '' OR A=@A)
and (ISNULL(@B, '') = '' OR B=@B)
--如何考虑性能的话,参考如下,能用上A,B字段的索引,且实现参数化查询。推荐
CREATE PROC up_test
@A INT,
@B INT
AS
DECLARE @sql NVARCHAR(max)
SET @sql = N'select * from tb WHERE 1 = 1 '
IF (ISNULL(@A, '') <> '')
SET @sql = @sql+' and A = @A '
IF (ISNULL(@B, '') <> '')
SET @sql = @sql+' and B = @B '
EXEC sp_executesql @sql, N'@A int, @B int', @A, @B
GO