我正在尝试创建一个存储过程,在正确输入用户名时返回用户的ID。根据返回的ID,我希望我的IF condiction返回一个unqiue号码,告诉我用户是否存在于数据库中。我希望这是有道理的。感谢。
ALTER PROC dbo.PassParamUserID
@UserID int
AS
DECLARE @FirstName varchar(50)
set nocount on
SELECT f_Name
FROM tb_User
WHERE tb_User.f_Name = @FirstName;
BEGIN
IF @UserID is not null
RETURN 222
ELSE
RETURN 333;
SET NOCOUNT OFF;
END
答案 0 :(得分:1)
如果我理解正确,你正在检查表中是否存在firstname,如果是,则返回该firstname的id ..如果它不存在,那么你希望该过程返回一个告诉的代码你缺少身份证件
在这种情况下,您希望@FirstName
作为参数进入,并且从数据库中的匹配行中选择@UserId变量
ALTER PROC dbo.PassParamUserID
@FirstName varchar(50)
AS
set nocount on
DECLARE @UserId INT
SELECT @UserID = UserId
FROM tb_User
WHERE tb_User.f_Name = @FirstName
IF @UserID IS NULL
BEGIN
SET @UserId = -999
END
SELECT @UserId
GO
检查涉及名字和姓氏的匹配可能是个更好的主意。此外,如果名称多次存在,您会怎么做?使用SET ROWCOUNT 1
来处理此
ALTER PROC dbo.PassParamUserID
@FirstName varchar(50),
@LastName varchar(50)
AS
set nocount on
DECLARE @UserId INT
SET ROWCOUNT 1
SELECT @UserID = UserId
FROM tb_User
WHERE tb_User.f_Name = @FirstName
AND tb_User.l_Name = @LastName
SET ROWCOUNT 0
IF @UserID IS NULL
BEGIN
SET @UserId = -999
END
SELECT @UserId
GO
答案 1 :(得分:0)
使用位输出参数
create procedure GetUserExists
@FirstName varchar(50),
@Ret bit out
as
if exists(select *
from tb_User
where tb_User.FirstName = @FirstName)
set @Ret = 1
else
set @Ret = 0
答案 2 :(得分:0)
如果我理解正确,这个选择查询可能有效:
EXISTS时选择案例(选择 TOP 1 1 FROM tb_User WHERE tb_User.f_Name = @FirstName)那么 1 ELSE 0 END
如果用户存在,则返回1,否则返回0。它应该更好地执行,因为使用前1(即不需要扫描超过1行的存在)。