我写了一个存储过程,它返回一个作者的合同状态。如果author不存在,则返回-900。这就是我所做的
CREATE PROCEDURE AUthorContract
@user varchar(10)
AS
IF(@user NOT IN(select Au_id from Authors))
BEGIn
RETURN -900
END
ELSE
BEGIN
select contract from from Authors where Au_id = @user
END
GO
然而,当我给出一个有效的作者id作为输入时,它会返回-900,如果我给出某个id,它会进入else并返回0。所以,我把它们反过来,输入正确的id,但它仍然只是返回0,而不是合约值。你能帮我改正我一直犯的错误吗?
存储过程可以"返回"三种类型的东西:
- int返回值,通过
RETURN
命令 - 输出参数值,通过参数列表:
@YourPartameter anydatatype OUTPUT
- 结果集:
SELECT * FROM YourTable
您的过程没有用于正常退出的RETURN
命令,因此它的默认值为零。如果返回值为零,则需要检查应用程序中的结果集。
尝试返回联系人值:
CREATE PROCEDURE AUthorContract
@user varchar(10)
AS
DECLARE @contract int
IF(@user NOT IN(select Au_id from Authors))
BEGIn
RETURN -900
END
ELSE
BEGIN
select @contract=contract from from Authors where Au_id = @user
END
RETURN @contract
GO
尝试使用OUTPUT参数:
CREATE PROCEDURE AUthorContract
@user varchar(10), @contract varchar(30) OUTPUT
AS
IF(@user NOT IN(select Au_id from Authors))
BEGIn
RETURN -900
END
ELSE
BEGIN
select @contract=contract from from Authors where Au_id = @user
END
RETURN 0
GO
下面是结果集,带有显式返回:
CREATE PROCEDURE AUthorContract
@user varchar(10)
AS
IF(@user NOT IN(select Au_id from Authors))
BEGIn
RETURN -900
END
ELSE
BEGIN
select contract from from Authors where Au_id = @user
END
RETURN 0
GO
单向
CREATE PROCEDURE AUthorContract
@user varchar(10)
AS
IF NOT EXISTS(select 1 from Authors WHERE Au_id = @user )
BEGIN
SELECT -900 as contract -- this will return a result set
END
ELSE
BEGIN
select contract from Authors where Au_id = @user
END
GO
,但返回状态与结果集不同如果进程成功,您将获得0,对于返回,您只能使用整数,如果需要返回varchar
您没有返回合同值。您只是选择要输出的标量值。存储进程返回0,因为它完成执行后没有返回其他值。
另外,不确定它是否是一个打字错误,但你有一个额外的from
在你的select
子句。
try:
IF(@user NOT IN(select Au_id from Authors))
BEGIn
declare @a int
set @a= -900
return @a
--print @a
END