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