代码之家  ›  专栏  ›  技术社区  ›  Phil

存储过程不返回任何内容

  •  8
  • Phil  · 技术社区  · 15 年前

    此存储过程不工作。我已经检查了SQL,它在直接解析到数据库时返回正确的值。真奇怪!它只返回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 回复  |  直到 15 年前
        1
  •  7
  •   Martin Smith    15 年前
     @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
    
        2
  •  1
  •   Dustin Laine    15 年前

    您不需要分配 salt 变为变量。

    CREATE PROCEDURE dbo.GetSaltOfUser
    (
        @eMail nvarchar    
    )
    AS
    BEGIN
        SELECT salt
        FROM UserSet
        WHERE eMail = @eMail
    END
    
        3
  •  1
  •   Siva    15 年前

    离我这边两美分

    • 很好,您使用的是set nocount on
    • 始终使用返回返回状态代码,例如0-成功,1-失败
    • 使用Select返回行
    • 使用Try Catch处理错误条件