我正在尝试使用存储过程基于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'
您必须匹配参数: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