2017-02-23 204 views
-1

Я хочу написать хранимую процедуру для вставки информации о сотруднике. Но он должен возвратить, существует ли сотрудник с данным именем в базе данных или нет, так что пользователь не может зарегистрироваться с тем же именем сотрудника дважды.Проверка наличия имени пользователя в базе данных с использованием хранимой процедуры в SQL Server

alter proc str_insertInfo 
    @name nvarchar(30), 
    @dob date, 
    @department_id int, 
    @description nvarchar(500), 
    @gender char(10), 
    @hobby int, 
    @image nvarchar(50) 
as 
begin 
    DECLARE @count int 
    If exists (select count(emp_name) from employee_info where emp_name = @name) 
    Begin 

     Set @count = 1 
     return @count 

    End  
    Else 
    begin 

     Set @count = 0 
     insert into employee_info 
     values (@name, @dob, @department_id, isnull(@description, 'no description'), 
      @gender, isnull(@hobby, 'no hobby'), isnull(@image, 'no image')) 

    End 

    Return @count 

end 
+0

Пожалуйста, отредактируйте ваш вопрос с помощью версии SQL-сервера, данных образца, структуры таблицы, предыдущих попыток кода. – JohnHC

+0

@JohnHC, пожалуйста, проверьте код выше и дайте предложение – user19041992

ответ

0

Используйте EXISTS пункт:

IF EXISTS(SELECT 1 FROM your_table WHERE Column_name = Inputparameter(ie:user 
name)) 
BEGIN 
    RAISERROR('UserName already exists', 16, 1) 
END 
2
CREATE PROCEDURE CheckUsername(
    @Username VARCHAR(50) 
) 
AS 
BEGIN 

    IF EXISTS(SELECT 1 FROM your_table WHERE Column_name = @Username) 

END 

Отредактированный с синтаксисом SQL Server. Пожалуйста, проверьте

0

Вы должны объявить переменную как выход в СП & получить его значение в код & отображения сообщений в соответствии с результатом

DECLARE @result INT = 0 ВЫХОД

SET @result = - -Success
SET @result = --error
SET @result = --Already Exist

IF EXISTS(SELECT 'x' FROM table 
       WHERE Condition) 
    BEGIN 

     SET @Result = 2 
     RETURN 

    END 

Примечание: Код устанавливается направление параметра, как ParameterDirection.Output

0

ваш запрос является правильным. Проблема в том, что вы использовали count (emp_name). Это всегда возвращает строку. Он также может быть равен нулю, но существует только проверка наличия строки.

Вот почему ваш запрос не удался. И я предполагаю, что он всегда возвращался 1. Если вы удаляете счет, он должен работать нормально.

Naz