【问题标题】:SQL Server output and return value in procedure过程中的 SQL Server 输出和返回值
【发布时间】:2016-11-07 00:13:32
【问题描述】:

我是 SQL Server 的新手,我遇到了无法修复的错误:

消息 245,级别 16,状态 1,程序信息,第 11 行
将 varchar 值 'Steven' 转换为数据类型 int 时转换失败

您能否告诉我错误在哪里,我该如何解决?

代码如下,谢谢。

CREATE PROCEDURE info (@id int, @howMuch int OUTPUT) 
AS
   SELECT * 
   FROM emp 
   WHERE empno = @id;

   SELECT @howMuch = COUNT(*) 
   FROM emp;

   DECLARE @name varchar(100)

   SELECT @name = ename 
   FROM emp 
   WHERE empno = @id

   RETURN @name

-- execute the procedure. It throws error.
DECLARE @num_rows int, @who varchar(100)
EXECUTE @who = info 100, @num_rows OUTPUT

SELECT @num_rows, @who

【问题讨论】:

  • 我注意到:如果我不使用“return”,而是使用“print”来可视化“@name”,则该过程有效,并且我看到了“@name”。如果我将“@name”作为输出参数而不是“return”,它也很有效。似乎错误仅在使用“return”返回@name时出现。为什么是这样?我错过了什么?
  • 您误解了 PRINT 和 RETURN 的作用。 Print 向编译器推送一个值,而 RETURN 向调用者推送一个值,例如由查询定义的。这些规则在MSDN's documentation 中定义。通常,使用 FUNCTION 是合适的,但您也可以在 proc 本身中使用 OUPUT 语句将值返回给调用者。
  • 是的,现在我明白了。我不明白return的用途。我想我可以对所有类型的数据使用 return,而不仅仅是 int。现在很清楚了。谢谢。
  • 嗯,你可以返回表格函数/返回不同的数据类型。我觉得你放弃有点太早了。
  • 谢谢。我知道使用表格函数,但我误解了在过程中使用命令“return”。现在我知道我只能返回 int 数据类型。我在返回员工工资的过程在线示例教程中感到困惑,我认为我可以返回任何信息,包括员工的姓名。

标签: sql-server tsql stored-procedures return out-parameters


【解决方案1】:

存储过程的返回值应始终为整数数据类型。 如果使用函数,则可以返回其他数据类型,但只能返回一个值。

由于您需要存储过程中的两个值,您可以使用两个输出参数...

CREATE PROCEDURE info2 (@id int , @howMuch int OUTPUT, @name varchar(100) OUTPUT) AS

【讨论】:

  • 是的,现在我明白了。我不明白return的用途。我想我可以对所有类型的数据使用 return,而不仅仅是 int。现在很清楚了。谢谢。
  • 此页面包含有关从存储过程中重新调整数据的两种方法的信息:msdn.microsoft.com/en-us/library/ms188655.aspx 虽然我看到的许多用法都提到了返回错误代码的“return”,但它不必是唯一的情况。在您的示例中,您可以将值 @howm 作为返回值而不是输出参数返回。通常,我使用返回码来返回删除计数、插入计数等。
猜你喜欢
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多