【发布时间】: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