我有一个非常简单的存储过程,使用Wild Card
过滤行我的问题是为什么Wild卡不会返回特定的行?
例如,我有以下条目:
ID Name Price
1 rose pink 20
2 dark rose 63
3 rose pink New 40
4 black Velvet 30
如果我说
select * from Product
where Name like '%rose%'
它将返回前三行。细
但是当我说
时 select * from Product
where Name like '%rose pink%'
它必须仅返回第一行,但wild card
的作用是,它也返回第三行。所以我的问题是,如果像sp
那样使用通用术语,如何使rose
能够返回所有行。同时我希望我的sp
仅返回名称与传递的参数完全匹配的行
修改 这是商店程序:
create procedure [dbo].[usp_Get_Products]
@rvcName varchar(50),
as
begin
select * from Product where Name Like '%'+ @rvcName +'%'
end
答案 0 :(得分:0)
也许是这样的
IF EXISTS (
SELECT 1
FROM Product
WHERE Name = @rvcName
)
SELECT *
FROM Product
WHERE Name = @rvcName
ELSE
SELECT *
FROM Product
WHERE Name LIKE '%'+ @rvcName +'%'
答案 1 :(得分:0)
所以我的问题是,如何使sp能够返回所有行if 像rose一样使用通用术语。同时我想要我的sp 仅返回名称与传递完全匹配的行 参数
答案是您必须指示您的sp使用Like
或=
。
当您使用Like
时,通常会搜索以您提供的文本开头,结尾或包含该文字的内容。
因此,您的选项(例如,搜索rose
)是:
name = 'rose'
(name like 'rose'
)name like 'rose%'
name like '%rose%'
name like '%rose'
无法以“通用”形式组合1和3。
请考虑使用Full Text
代替Like
。