我正在尝试使用存储过程返回'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'
答案 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