2011-07-20 142 views
2

我試圖使用存儲過程根據varchar類型的「Name」列的輸入值返回'item'表的'ItemId'列值,但每當我通過任何存儲過程的值返回給我一個錯誤:將數據類型varchar轉換爲int時出錯。將數據類型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' 

回答

4

,你必須符合參數:RETURN不填充輸出參數:你分配給@itemid做到這一點。

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

此外,您的存儲過程太複雜。返回不是從存儲過程返回數據的好選擇,EXISTS是不必要的。在這種情況下,如果未找到@itemId,它將爲NULL

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

感謝您的幫助。 – Dusk

相關問題