关于存储过程中动态添加where子句的问题
本帖最后由 wyx177694333 于 2013-04-13 16:49:18 编辑
RT
在一个带有参数的存储过程中,因为参数可为空,所以我想
实现当某一参数为空时,where子句就少一个查询条件。
CREATE PROCEDURE [dbo].[XXXXXXX](
@COL1 VARCHAR(50)
,@COL2 VARCHAR(50)
)
AS
SELECT
A.COL1
,A.COL2
FROM
TABLE1 A
WHERE
A.COL1 = @COL1
AND
A.COL2 = @COL2
上面红字的地方要怎么修改啊?以前见别人用NULLIF/ISNULL实现了,但当时没记下来...
SQL
存储过程
------解决方案--------------------SELECT
A.COL1
,A.COL2
FROM
TABLE1 A
WHERE
(@COL1 = NULL or A.COL1 = @COL1)
AND
(@COL2 = NULL or A.COL2 = @COL2)
------解决方案--------------------那就写两组,用if判断一下
if @col1 is null or @col1=''
select ...where xx
else
select ...where xxxx
------解决方案--------------------CREATE PROCEDURE [dbo].[XXXXXXX]
(
@COL1 VARCHAR(50) ,
@COL2 VARCHAR(50)
)
AS
SELECT A.COL1 ,
A.COL2
FROM TABLE1 A
WHERE A.COL1 = ISNULL(@COL1, A.COL1)
AND A.COL2 = ISNULL(@COL2, A.COL2)
------解决方案--------------------那位大侠是对的呢
------解决方案--------------------不担心性能的话。这种写法最简单。。
declare @KHBH varchar(10) = '%'
select * from KHZLB where isnull(KHBH,'%') like @khbh
------解决方案--------------------还有一种写法:
CREATE PROCEDURE [dbo].[XXXXXXX]
(
@COL1 VARCHAR(50) ,
@COL2 VARCHAR(50)
)
AS
SELECT A.COL1 ,
A.COL2
FROM TABLE1 A
WHERE nullif(@COL1, A.COL1) is null
AND nullif(@COL2, A.COL2) is null