sql-server - 存储过程中 varchar 输出参数的用途是什么 - 不能 'return @myvarchar' 但可以 'select @myvarchar'

标签 sql-server sql-server-2005 output-parameter

示例:

CREATE PROCEDURE dbo.sp_Delete (@p1 INT, @p2 VARCHAR(10) OUTPUT)
AS
    --@p1 will have calculations done and get a value for @p2
    SET @p2 = 'test'
    RETURN @p2

测试:

DECLARE @p2 VARCHAR(100)
EXEC sp_Delete
     @p1 = N'1',
     @p2 = N''

错误:

Conversion failed when converting the varchar value 'test' to data type int.

但是 你可以这样做:

ALTER PROCEDURE dbo.sp_Delete (@p1 INT)
AS
    --@p1 will have calculations done and get a value for @p2
    SELECT 'test'


    EXEC sp_Delete
         @p1 = N'1'

所以我的问题是,当你不能使用“return @myvar”(如果它是一个)时,拥有 varchar 类型的 OUTPUT 参数有什么用(注意我不是质疑 int 类型的输出参数) varchar。您只需“选择@myvar”即可。 我试图找出我做错了什么,因为我认为我不理解特定 varchar 输出变量的使用。

最佳答案

输出变量与返回值不同。返回值始终是整数。您可以像这样检索它:

exec @retval = dbo.MyStoredProcedure

当检索输出参数时,如下所示:

exec dbo.MyStoredProcedure @par_out output

在您的情况下,请省略 return 语句。 set @par_out = 'value' 足以将输出参数返回给调用代码。

关于sql-server - 存储过程中 varchar 输出参数的用途是什么 - 不能 'return @myvarchar' 但可以 'select @myvarchar',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14850596/

相关文章:

sql - object_id() 与 sys.objects

sql-server - CTE 到底如何发挥作用?

sql-server - Linq 转 Sql : SQL Default Value overridden

sql-server - SQL Server 如何将日期与字符串文字进行比较?

SQL SUM、CASE 和 DISTINCT

stored-procedures - PetaPoco 和存储过程的输出参数?

SQL 约束或条件

python - 尝试将字符串插入 SQL Server 的问题

c# - 在 WCF 服务的方法中使用输出参数是不好的做法吗?

c# - 无法在带有输出参数的存储过程中将对象从 DBNull 转换为其他类型