【发布时间】:2019-10-08 06:30:23
【问题描述】:
我正在尝试编写一个基于选择查询结果返回值的过程。与查找用户 ID 一样,使用名字和姓氏来定位用户 ID,并将 ID 作为 OUTPUT 参数返回。如果找到多个用户或没有找到用户,则设置返回值 -1,并将 OUTPUT 参数设置为 0。
我尝试了以下代码,但出现错误:
必须声明标量变量“@intValue”
我在互联网上搜索过,但没有一个能解决我的问题。
CREATE PROCEDURE GetIdOfUser
(@f_name VARCHAR(50),
@l_name VARCHAR(50),
@outValue INT OUTPUT)
AS
DECLARE @intValue INT;
SELECT @intValue = userID
FROM users
WHERE firstName = @f_name AND lastName = @l_name
IF @@rowcount > 1 -- more than one user?
BEGIN
SET @outValue = 0
RETURN -1;
END
IF @@rowcount == 1
BEGIN
SET @outValue = @intValue;
END
DECLARE @myretValue INT;
EXEC GetIdOfUser 'raj', 'ahuja', @myretValue;
SELECT @myretValue;
我正在使用 SQLfiddle[sqlfiddle.com] 来学习 SQL Server 概念。我对在 SQL Server 中创建过程非常陌生,因此我们将不胜感激。
编辑 1:SQL Server 版本为 2017
编辑 2: 我正在使用的架构和示例数据。
create table users
(
userID int,
firstName varchar(50),
lastName varchar(50),
title varchar(50)
);
insert into users(userID, firstName, lastName, title)
values(501, 'natasha', 'ghosh', 'title1'),
(502, 'raj', 'ahuja', 'title2'),
(503, 'katy', 'perry', 'title3'),
(504, 'john', 'cyrus', 'title4'),
(505, 'anindita', 'pal', 'title5');
【问题讨论】:
-
IF @@rowcount == 1应该是IF @@rowcount = 1。不知道为什么会出现错误。 -
你的 @@ROWCOUNT 被重置为 0。将其更改为 else 块...然后正确调用它。 See the demo here。 @@ROWCOUNT 可能很棘手。 See this blog 在一个实例上。此外,使用
PRINT会将其重置为 0。 -
它可以工作@Diksha...See the demo here 我只是在过程中更改了表名。请注意,这是我在之前的 cmets 中已经建议的编辑。
-
哦,我敢打赌,我知道这里有什么问题。 @Diksha return 语句与输出变量是一种非常不同的动物。我有一种感觉,您希望在输出变量中看到返回值。程序不是这样运作的。它有一个返回值,应该用于执行状态,而不是返回数据。然后你有完全不同的输出参数。你可以有很多,它们可以是任何数据类型。返回值始终是 int。
-
@Diksha 是的,这是正确的。
标签: sql-server stored-procedures parameter-passing