存储过程不返回数据

时间:2014-03-15 21:23:46

标签: sql-server tsql stored-procedures

我有以下存储过程。这很简单

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%'

我会得到数据。

我在这里做错了什么?

谢谢

2 个答案:

答案 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