【问题标题】:stored procedure returns nothing存储过程不返回任何内容
【发布时间】:2011-04-26 04:40:38
【问题描述】:

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

可能出了什么问题?

改变程序 dbo.GetSaltOfUser

 (
 @eMail nvarchar

 )

作为
声明@result nvarchar
 /* 设置无计数 */
开始
   选择 @result = 盐
   来自用户集
   WHERE 电子邮件 = @eMail
   返回@结果
结尾

【问题讨论】:

  • 从我在 Visual Studio 中编写它的地方开始。我右键单击并选择执行。
  • 你是如何确定返回值的?
  • 哇,oops 标签是怎么回事?我应该在我所有的问题上都有这个。“哎呀,我知道的不够多”:)

标签: sql sql-server tsql stored-procedures oop


【解决方案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

【讨论】:

  • 哦,这么简单?谢谢,我很幸运在项目的早期就遇到了这个问题。
  • 回答你的问题;我正在寻找输出参数是正确的。即使命令相当简单,总是有一个输出参数是更好的做法吗?
  • @Phil - 是的。我相信OUTPUT 参数比标量选择更轻量级。
【解决方案2】:

您不需要将salt 分配给变量。

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

【讨论】:

  • 看起来,我不能返回一个 var,因为它必须是一个整数?这只适用于“RETURN”命令吗?
  • 它将以任何数据类型返回salt。您可以将其转换为您想要的任何东西,显然在范围内。 CAST(salt AS nvarchar(50)) AS salt
【解决方案3】:

离我最后两分钱

  • 很好,您正在使用 SET NOCOUNT ON
  • 始终使用 RETURN 返回状态码,示例 0- 成功,1 - 失败
  • 使用 SELECT 返回 ROWS
  • 使用 Try Catch 处理错误情况

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多