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)
您可以执行以下任一操作:
更改:
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)