SQL Server存储过程中的返回值

and*_*ter 12 sql sql-server stored-procedures

我有一个存储过程,其中包含if语句.如果计算的行数大于0,则应将唯一的输出参数设置@UserId为0

但是它只返回查询第二部分中的值.

@EmailAddress varchar(200),
@NickName varchar(100),
@Password varchar(150),
@Sex varchar(50),
@Age int,
@EmailUpdates int,
@UserId int OUTPUT
IF 
    (SELECT COUNT(UserId) FROM RegUsers WHERE EmailAddress = @EmailAddress) > 0
    BEGIN
        SET @UserId = 0
    END
ELSE
    BEGIN
        INSERT INTO RegUsers (EmailAddress,NickName,PassWord,Sex,Age,EmailUpdates) VALUES (@EmailAddress,@NickName,@Password,@Sex,@Age,@EmailUpdates)
        SELECT SCOPE_IDENTITY()
    END

END
Run Code Online (Sandbox Code Playgroud)

Cur*_*urt 7

您可以执行以下任一操作:

更改:

SET @UserId = 0到 SELECT @UserId

这将以与IF语句的第二部分相同的方式返回值.


或者,将@UserId设置为输出,更改:

SELECT SCOPE_IDENTITY()SET @UserId = SCOPE_IDENTITY()


这取决于您之后如何访问数据.如果要将值放在结果集中,请使用SELECT.如果您想在之后访问@UserId参数的新值,请使用SET @UserId


看到您接受第二个条件是正确的,您可以编写的查询(无需更改此查询之外的任何内容)是:

@EmailAddress varchar(200),
@NickName varchar(100),
@Password varchar(150),
@Sex varchar(50),
@Age int,
@EmailUpdates int,
@UserId int OUTPUT
IF 
    (SELECT COUNT(UserId) FROM RegUsers WHERE EmailAddress = @EmailAddress) > 0
    BEGIN
        SELECT 0
    END
ELSE
    BEGIN
        INSERT INTO RegUsers (EmailAddress,NickName,PassWord,Sex,Age,EmailUpdates) VALUES (@EmailAddress,@NickName,@Password,@Sex,@Age,@EmailUpdates)
        SELECT SCOPE_IDENTITY()
    END

END
Run Code Online (Sandbox Code Playgroud)