我写了一个存储过程,它返回了一个作者的合同状态。如果作者不存在,我将返回-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而不是合同值。 你可以帮我解决我一直在做的错误。数据库是pubs。
答案 0 :(得分:1)
单程
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
但返回状态与结果集不同 如果proc成功,你将获得0,返回时只能使用整数,如果需要返回varchar,则使用输出参数
答案 1 :(得分:1)
存储过程可以“返回”三种类型的东西:
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
答案 2 :(得分:0)
您没有返回合同价值。您只是选择要标记的标量值。存储过程返回0,因为它完成了执行而没有返回值。
此外,不确定它是否是拼写错误,但您的from
条款中还有额外的select
。
答案 3 :(得分:0)
尝试:
IF(@user NOT IN(select Au_id from Authors))
BEGIn
declare @a int
set @a= -900
return @a
--print @a
END