一尘不染

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

sql

我正在尝试使用存储过程基于varchar类型的“名称”列的输入值来返回“项目”表的“
ItemId”列值,但是每当我将任何值传递给存储过程时,它都会向我返回错误: 将数据类型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'

阅读 166

收藏
2021-03-08

共1个答案

一尘不染

您必须匹配参数:RETURN不会填充OUTPUT参数:您对@itemid的赋值可以做到这一点。

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

另外,您存储的过程太复杂了。对于从存储的proc返回数据来说,RETURN不是一个好的选择,而EXISTS则是不必要的。在这种情况下,如果未找到,@
itemId将为NULL

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