将数据类型varchar转换为int时出错

时间:2011-07-20 06:29:51

标签: sql sql-server stored-procedures

我正在尝试使用存储过程返回'item'表的'ItemId'列值,该存储过程基于varchar类型的'Name'列的输入值,但每当我将任何值传递给存储过程时它都返回我是一个错误:将数据类型varchar转换为int。

时出错
 create procedure RetrieveId
(@itemId int output,@Name varchar(30))
As
Begin
If exists(Select  * from item where [Name] = @Name)
Begin
 Select @itemId = itemid from item 
  where [Name] = @Name
 return @itemId
End
Else
return 1
End

这就是我的称呼方式:

RetrieveId 'asf'

1 个答案:

答案 0 :(得分:4)

您必须匹配参数:RETURN不会填充OUTPUT参数:您对@itemid的分配就是这样做的。

DECLARE @item int
EXEC RetrieveId @item OUTPUT, 'asf'

此外,您的存储过程太复杂了。 RETURN不是从存储过程返回数据的好选择,并且EXISTS是不必要的。在这种情况下,@itemId如果找不到则为NULL

create procedure RetrieveId
   @itemId int output,
   @Name varchar(30)
As
   Select @itemId = itemid
   from item 
   where [Name] = @Name
GO