使用返回值的参数创建存储过程

时间:2011-01-13 13:10:38

标签: tsql

我正在尝试创建一个存储过程,在正确输入用户名时返回用户的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

3 个答案:

答案 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行的存在)。