【问题标题】:How to check if username exists如何检查用户名是否存在
【发布时间】:2012-06-20 11:15:13
【问题描述】:

如果用户名存在则返回 1,否则返回 0?这是我尝试过的。

IF EXISTS (SELECT * FROM [User] WHERE UserName = @UserName and EmailID=@EmailID) 
    begin
      return 1;
    end
     else
      begin
    declare @CreatedOn datetime
    select @CreatedOn = getdate()
    insert into [User](UserName,Password,EmailID,ContactNo,CreatedOn) values(@UserName,@Password,@EmailID,@ContactNo,@CreatedOn)

【问题讨论】:

  • 只是确认一下,你是想在用户名存在时返回1,还是用户名和邮箱都存在时返回1?您的代码暗示了与文本不同的内容。
  • 这应该有效: SELECT COUNT(*) FROM [User] WHERE (UserName= @UserName AND EmailId=@EmailId ) 如果不存在则返回 0,如果存在则返回 1 或更多
  • 但正如@psych 所说,如果不存在,您也在创建。
  • 当用户名或电子邮件存在时返回 1 ......对不起,我不知道如何使用 out 参数来摆脱这个......你能取悦我吗朋友,,,,,
  • 用户名或电子邮件,或用户名和电子邮件?

标签: asp.net sql stored-procedures


【解决方案1】:
CREATE PROCEDURE CheckUserExists
AS
    @UserName NVARCHAR(MAX),
    @Email NVARCHAR(MAX)
BEGIN    
    IF EXISTS (SELECT 1 FROM [User] WHERE UserName = @UserName OR EmailID=@EmailID) 
    BEGIN
        RETURN 1
    END
    ELSE BEGIN
        RETURN 0    
    END
END

【讨论】:

  • 它不起作用..我的建议是,如果不使用 out 参数,我们将无法从存储过程中返回值..所以请使用它或任何其他任何它工作的编码提供一些其他编码..请电话
  • 因此,当您调用 exec CheckUserExists 并传入有效参数时,您会得到返回值还是 2 或 -1?这似乎没有意义......请确保您是从 SSMS 中调用存储过程,而不是从您的代码中。什么情况下返回2(或-1)?
  • 这是正确的做法;它将/永远不会返回 2 或 -1,如果您看到这些结果,您需要使用您用来执行和捕获 USP 的方法更新您的问题。
  • 这表明问题是您尚未发布的问题,因为我相信我的回答是正确的。你怎么称呼SP?你确定你调用的是正确的程序吗?
  • 一切似乎都表明您没有调用您认为的 SQL,因此请仔细检查以确保您实际运行的是我在答案中输入的内容。
【解决方案2】:

也许你可以试试这个查询:

Select count(*) from [user] where  UserName = @UserName and EmailID=@EmailID

如果用户名存在,count(*) 将大于 0

【讨论】:

  • 它不起作用..我的建议是,如果不使用 out 参数,我们将无法从存储过程中返回值..所以请使用它或任何其他任何它工作的编码提供一些其他编码..请电话
【解决方案3】:

我在这里看到了一个更大的问题。你说你想知道用户是否存在。但是查询显示了一个副作用,如果用户不存在,您将在同一个调用中创建用户。这些应该是单独的 sqlcommands。一个用于查询/读取,另一个用于命令/插入。

要确定用户是否存在,一个简单的select 1 from [users] where [username] = @user 就足够了。如果返回任何 (1?) 行,则用户存在,否则用户不存在。

然后您可以发出命令来创建用户

insert into [User](UserName,Password,EmailID,ContactNo,CreatedOn) values(@UserName,@Password,@EmailID,@ContactNo,getdate())

【讨论】:

  • 它不起作用..我的建议是,如果不使用 out 参数,我们将无法从存储过程中返回值..所以请使用它或任何其他任何它工作的编码提供一些其他编码..请电话
  • 输出参数不是必需的。使用ExecuteReader() 获取结果。我不惜一切代价避免使用参数。
【解决方案4】:

试试这个:

IF EXISTS (SELECT 1 FROM [User] WHERE UserName = @UserName and EmailID=@EmailID) 
    begin
      return 1;
    end
     else
       return 0;

【讨论】:

  • 它不起作用..我的建议是,如果不使用 out 参数,我们将无法从存储过程中返回值..所以请使用它或任何其他任何它工作的编码提供一些其他编码..请电话
【解决方案5】:
/* Execute the SP As*/
DECLARE @return_value int
EXEC    @return_value = [dbo].[CheckUserExists]
Select @return_value

/*STORED PROCEDURE*/
CREATE PROCEDURE CheckUserExists
AS
    @UserName NVARCHAR(MAX),
    @Password NVARCHAR(MAX)
    @EmailID NVARCHAR(MAX),
    @ContactNo NVARCHAR(MAX)
BEGIN

IF EXISTS (SELECT 1 FROM [User] WHERE UserName = @UserName and EmailID=@EmailID) 
    BEGIN
      RETURN 1;
    END
     ELSE
      BEGIN
        DECLARE @CreatedOn DATETIME
        SELECT @CreatedOn = GETDATE()
        INSERT INTO [User](UserName,Password,EmailID,ContactNo,CreatedOn) 
        VALUES(@UserName,@Password,@EmailID,@ContactNo,@CreatedOn)
        RETURN 0;
END

【讨论】:

  • 它不起作用..我的建议是,如果不使用 out 参数,我们将无法从存储过程中返回值..所以请使用它或任何其他任何它工作的编码提供一些其他编码..请电话
  • @giri 尝试从 SqlServer-Management-Studio 执行您的存储过程(“右键单击”Sp 和“执行”)。然后您将看到如下所示的代码。 DECLARE (at)return_value int EXEC (at)return_value = [dbo].[CheckUserExists] 选择 (at)return_value;这就是从 sp 返回的值在外部接收的方式。这里 (a) => 以速率
【解决方案6】:

创建过程 CheckUserExists 作为 @用户名 NVARCHAR(MAX), @Email NVARCHAR(MAX) 开始
声明@usercount int

Select @usercount = count(UserName) from [user] where  UserName = @UserName and EmailID=@EmailID

IF (@usercount = 1) 
BEGIN
    RETURN 1
END
ELSE BEGIN
    RETURN 0    
END

结束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2016-08-08
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多