通过查询迭代SQL查询



我写了一个存储过程,它返回一个作者的合同状态。如果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

最新更新