2015-11-06 99 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); 

不过,我建议把上​​唯一索引,然后用try/catch块捕捉到任何错误。我不认为需要单独的交易。

+0

你怎么做错误处理?开始尝试...结束尝试BEGIN CATCH \t ERROR_MESSAGE()AS ErrorMessage; END CATCH; – user2127184

+0

从文档开始:https://msdn.microsoft.com/en-us/library/ms175976.aspx。 –