我们与LIKE
一起使用的varchar
是否可以与int
一起使用?
我想过滤三个parameters
,其中两个是varchar
所以我可以使用LIKE
,如果我得到一个空字符串,我仍然可以检索所有记录。但是,如何使用int
我想检索即使fkProductTypeID
不存在:
这是我的问题:
select * from Product
where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%'
AND fkProductTypeID = @ptype
我希望它能够检索结果,即使我提供的ID不存在。从前端开始,如果我在@code
中传递“@name
”,在@ptype
中传递0,我希望它能够检索所有记录
答案 0 :(得分:2)
你可以用这个:
select * from Product
where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%'
AND (@ptype IS NULL OR fkProductTypeID = @ptype)
如果它在存储过程中,您应该使用IF ... ELSE
:
CREATE PROCEDURE dbo.SP_Name(@ptype int, @code varchar(1000), @name varchar(1000))
AS
BEGIN
IF @ptype IS NULL
BEGIN
select * from Product
where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%'
END
ELSE
BEGIN
select * from Product
where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%'
AND fkProductTypeID = @ptype
END
END
答案 1 :(得分:1)
这是你想要的吗?
&"')"
值select *
from Product
where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%' AND
(fkProductTypeID = @ptype or @ptype is null);
对整数没有意义。并且,不要混合类型进行比较。只需使用''
即可。
答案 2 :(得分:0)
以这种方式可能
select * from Product
where CASE WHEN @code>0 THEN Code ELSE 0 END like '%'+ @code +'%'
AND name LIKE '%'+ @name +'%'
AND fkProductTypeID = @ptype