我有以下存储过程。这很简单
ALTER PROCEDURE [dbo].[SPU_IsoSearch]
@searchby varchar(4),
@userinput varchar(25)
AS
IF(@userinput IS NOT NULL)
BEGIN
if(@searchby = 'fname')
BEGIN
SET NOCOUNT ON;
SELECT CustID, CustFirstName, CustLastName, CustCity, CustEmail
FROM Customers where CustFirstName like '%' + @userinput + '%'
ORDER BY CustFirstName
END
END
然后,我执行它:
exec spu_isoSearch 'fname','de'
它不返回任何内容,只是一条消息"命令已成功完成。"
但如果我只写:
select * from Customers where CustFirstName like '%de%'
我会得到数据。
我在这里做错了什么?
谢谢
答案 0 :(得分:2)
您的参数'searchby'是varchar(4),尝试更改为varchar(5)或适当的长度
由于它被声明为varchar(4),你的if语句会将'fnam'与'fname'进行比较,因为它们不相等,所以select语句不会执行
答案 1 :(得分:1)
由于Ghost(用户)已经提到了参数长度,并且在侧面注释,您的程序可以更多地清理一下这样的事情..
ALTER PROCEDURE [dbo].[SPU_IsoSearch]
@searchby varchar(5), --<-- As pointed out by OP "Ghost"
@userinput varchar(25)
AS
BEGIN
SET NOCOUNT ON;
IF(@searchby = 'fname' AND @userinput IS NOT NULL)
BEGIN
SELECT CustID, CustFirstName, CustLastName, CustCity, CustEmail
FROM Customers where CustFirstName like '%' + @userinput + '%'
ORDER BY CustFirstName
END
END