带有字符串返回类型的存储过程出错

Sau*_*uly 0 sql-server asp.net stored-procedures

ALTER PROCEDURE [dbo].[Signin_Check] 
    @uid varchar(50), @pwd varchar(50), @uname varchar(50) output
AS
   IF EXISTS (SELECT * FROM threeLayer_user WHERE uid = @uid and pass = @pwd)
   BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON;

      SELECT @uname = name 
      FROM threeLayer_user 
      WHERE uid = @uid and pass = @pwd

      RETURN @uname
   END
Run Code Online (Sandbox Code Playgroud)

此存储过程抛出错误:

将varchar值'Saurav'转换为数据类型int时转换失败.

Seb*_*ine 6

您的代码包含该行

return @uname
Run Code Online (Sandbox Code Playgroud)

return语句只能接受整数值.但是,您的@uname参数是输出参数,因此您无需也返回它.只需确保OUTPUT在调用sproc时指定:

EXEC dbo.Signin_Check @uid, @password, @uname OUTPUT;
Run Code Online (Sandbox Code Playgroud)