示例:
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)时,拥有varchar类型的OUTPUT参数有什么用(注意,我不是在质疑int类型的输出参数)。你可以"选择@myvar"。我试图弄清楚我做错了什么,因为我认为我不理解使用特定的varchar输出变量。
输出变量与返回值不同。返回值始终是一个整数。你可以像这样检索:
exec @retval = dbo.MyStoredProcedure
当检索输出参数时,如:
exec dbo.MyStoredProcedure @par_out output
在您的情况下,请省略return
语句。set @par_out = 'value'
足以将输出参数返回给调用代码。
RETURN
只能返回int
值。实际上,您不需要使用RETURN
,只需省略它:
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'
declare @p1 int, @p2 varchar(100)
SELECT @p2 = '', @p1 = 1
exec sp_Delete
@p1,
@p2 OUTPUT
select @p2
您混淆了RETURN值和OUTPUT参数这两件事。
RETURN是sp执行的"总体"状态,而OUTPUT参数允许您发回过程中计算的多个值。
此外,对于要发回其值的OUTPUT参数,您应该指定OUTPUT关键字
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
您可以将RETURN值与OUTPUT参数混合使用
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'
如果不使用OUTPUT键,您将获得
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
您可以使用设置
declare
@variable_name datatype
begin
set @variable_name= (select query)
end
不要使用return语句返回varchar
值