Sql server 存储过程中varchar输出参数的用途是什么?不能“返回@myvarchar”,但可以“选择@myvarchar”

Sql server 存储过程中varchar输出参数的用途是什么?不能“返回@myvarchar”,但可以“选择@myvarchar”,sql-server,sql-server-2005,output-parameter,Sql Server,Sql Server 2005,Output Parameter,例如: 测试: 错误: DECLARE @p2 VARCHAR(100) EXEC sp_Delete @p1 = N'1', @p2 = N'' 但是 您可以这样做: Conversion failed when converting the varchar value 'test' to data type int. 所以我的问题是,有一个varchar类型的输出参数有什么用注意,我不是在问int类型的输出参数,如果它是varchar,你不能使用return@myva

例如:

测试:

错误:

DECLARE @p2 VARCHAR(100)
EXEC sp_Delete
     @p1 = N'1',
     @p2 = N''
但是 您可以这样做:

Conversion failed when converting the varchar value 'test' to data type int.
所以我的问题是,有一个varchar类型的输出参数有什么用注意,我不是在问int类型的输出参数,如果它是varchar,你不能使用return@myvar。您可以选择@myvar。
我试图找出我做错了什么,因为我认为我不理解特定varchar输出变量的用法。

输出变量与返回值不同。返回值始终为整数。您可以通过以下方式检索它:

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'
当检索输出参数时,如下所示:

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

只能返回int值。您不需要使用RETURN,实际上,只需省略它:

exec dbo.MyStoredProcedure @par_out output


您混淆了这两件事,返回值和输出参数

RETURN是sp执行的总体状态,而OUTPUT参数允许您发回在过程中计算的多个值

此外,对于要返回其值的输出参数,您应该指定OUTPUT关键字

declare @p1 int, @p2 varchar(100)
SELECT @p2 = '', @p1 = 1
exec sp_Delete
@p1,
@p2 OUTPUT

select @p2
可以将返回值与输出参数混合使用

declare @p2 varchar(100)
exec sp_Delete
@p1=N'1',
@p2=@p2 OUTPUT -- first @p2 is then sp_parameter name, second is the @p2 variable from you outer batch

select @p2
如果不使用输出键,您将

CREATE PROCEDURE TestProc
@P1 INT, 
@P2 VARCHAR(10) OUTPUT
AS
BEGIN
   SET @P2='SOME VALUE'
   RETURN @P1
END
GO
DECLARE @R INT, @P VARCHAR(10)
EXEC @R=TestProc @P1=1, @P2=@P OUT --OUT is short for OUTPUT, you can use either one
SELECT @R, @P

-----------------
1, 'SOME VALUE'

当我尝试执行此exec sp_Delete@p1=N'1',@p2输出时,我得到消息必须声明标量变量@p2。然后声明变量,f.e.declare@x varchar50;exec sp_Delete@p1=N'1',@p2=@x输出;
declare @p2 varchar(100)
exec sp_Delete
@p1=N'1',
@p2=@p2 OUTPUT -- first @p2 is then sp_parameter name, second is the @p2 variable from you outer batch

select @p2
CREATE PROCEDURE TestProc
@P1 INT, 
@P2 VARCHAR(10) OUTPUT
AS
BEGIN
   SET @P2='SOME VALUE'
   RETURN @P1
END
GO
DECLARE @R INT, @P VARCHAR(10)
EXEC @R=TestProc @P1=1, @P2=@P OUT --OUT is short for OUTPUT, you can use either one
SELECT @R, @P

-----------------
1, 'SOME VALUE'
DECLARE @R INT, @P VARCHAR(10)
EXEC @R=TestProc @P1=1, @P2=@P -- notice the missing OUTPUT
SELECT @R, @P --was not assigned in this batch so is NULL

-----------------
1, NULL