首页 文章

存储过程什么都不返回

提问于
浏览
7

此存储过程不起作用 . 我检查了SQL,并在直接解析到DB时返回正确的值 . 真奇怪啊!它只返回0行 .

可能有什么不对?

ALTER PROCEDURE dbo.GetSaltOfUser

 (
 @eMail nvarchar

 )

AS
DECLARE @result nvarchar
 /* SET NOCOUNT ON */
BEGIN
   SELECT @result = salt
   FROM UserSet
   WHERE eMail = @eMail
   RETURN @result
END

3 回答

  • 1
    @eMail nvarchar
    

    将传入的电子邮件截断为一个字符 . 你需要加长 . 例如

    @eMail nvarchar(50)
    

    这应该匹配 UserSet 中相关列的数据类型

    你真的想要使用这个的返回代码,或者你想使用 output parameter 或者只是一个标量选择?

    ALTER PROCEDURE dbo.GetSaltOfUser
    
        (
        @eMail nvarchar (50),      /*Should match datatype of UserSet.eMail*/
        @salt nvarchar (50) OUTPUT /*Should match datatype of UserSet.salt*/
      )
    
    AS
    BEGIN
        SET NOCOUNT ON
    
        SELECT @result = salt
        FROM UserSet
        WHERE eMail = @eMail
    END
    

    并称之为

    DECLARE @salt nvarchar(50)
    EXECUTE dbo.GetSaltOfUser N'abc@example.com', @salt OUTPUT
    SELECT @salt
    
  • 1

    您无需将 salt 分配给变量 .

    CREATE PROCEDURE dbo.GetSaltOfUser
    (
        @eMail nvarchar    
    )
    AS
    BEGIN
        SELECT salt
        FROM UserSet
        WHERE eMail = @eMail
    END
    
  • 7

    我最后两分钱

    • 好你正在使用SET NOCOUNT ON

    • 始终使用RETURN返回状态代码,示例0-成功,1 - 失败

    • 使用SELECT返回ROWS

    • 使用Try Catch处理错误条件

相关问题