2015-11-06 2 views
1

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

alter Procedure Check_Name 
    ([email protected] integer, 
    @username varchar(25), 
    @password varchar(100) 
    [email protected]_id integer) 
As 
Begin 
    INSERT INTO [user] (username, [password]) 
     SELECT 
      username, [password] 
     FROM 
      [user] AS u 
     WHERE 
      NOT EXISTS(SELECT * FROM [user] AS t 
         WHERE u.username = t.username); 
End 

Когда я пытаюсь выполнить это, говорят, что нулевые строки затронуты. В чем проблема?

execute Check_Name 'Pope', 'Life2Stressfull'; 
+0

Ваш запрос не имеет смысла. Вам нужно вставить четыре столбца, но только один из них указан в 'select'. –

ответ

2

Возможно, вы собираетесь что-то вроде этого:

Insert into user(username, password, role_id, date) 
    Select @username, NULL, NULL, getdate() 
    from user 
    Where Not Exists(Select * from user where username = @username); 

Однако я бы рекомендовал поставить уникальный индекс на user(username), а затем, используя блок try/catch захватить любые ошибки. Я не думаю, что нужна отдельная транзакция.

+0

как делать ошибку? Начните попробовать ... end try BEGIN CATCH \t ERROR_MESSAGE() AS ErrorMessage; END CATCH; – user2127184

+0

Начните с документации: https://msdn.microsoft.com/en-us/library/ms175976.aspx. –

Смежные вопросы