2011-07-20 8 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は、OUTPUTパラメータを移入しません:@itemidするためにあなたの割り当ては、それを行います。

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

また、保存されたprocが複雑すぎます。 RETURNは格納されたprocsからデータを返すための良い選択ではなく、EXISTSは不要です。この場合、見つからなければ@itemIdはNULLになります

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

ありがとうございました。 – Dusk

関連する問題