Как вставить или обновить время входа в новую таблицу при входе пользователя в систему

#sql #sql-server #ssms

#sql #sql-сервер #ssms

Вопрос:

Я пытаюсь написать запрос, который, если пользователь действителен, сохраняет время в другой таблице. У меня есть первая часть, чтобы проверить, действительны ли учетные данные для входа. Но вторую часть я не знаю: получите id зарегистрированное электронное письмо, затем используйте это id , чтобы записать его во вторую таблицу и вставить или обновить время в этой таблице.

Это моя первая часть запроса / хранимой процедуры

 Create Procedure spAuthenticateUser
@Email nvarchar(100),
@Wachtwoord nvarchar(100)
as
Begin
 Declare @Count int

 Select @Count = COUNT(Email) from Signin
 where [Email] = @Email and [Wachtwoord] = @Wachtwoord

 if(@Count = 1)
 Begin
  Select 1 as ReturnCode
 End
 Else
 Begin
  Select -1 as ReturnCode
 End
End
  

Это уже работает. Я попытался добавить

 if(@Count = 1)
     Begin
      Select 1 as ReturnCode
      INSERT INTO Logintijd (Id, Tijd)
      Select Id from Signin where [Email] = @Email
     End
  

Это таблица, которую я пытался использовать

 Create table Signin
(
    Id int identity primary key not null,
    Naam nvarchar(50) not null,
    Email nvarchar(50) unique not null,
    Wachtwoord nvarchar(50) not null
)
  

и

 Create table Logintijd

(
    Id int not null primary key,
    Tijd smalldatetime not null
)
  

Пытался сделать это с помощью обновленного класса

   IF EXISTS (Select Tijd from Logintijd Inner join Signin ON Logintijd.Id = Signin.Id)
  update Logintijd set Tijd = GETDATE() From Logintijd Inner join Signin ON Logintijd.Id = Signin.Id
  ELSE
 INSERT INTO Logintijd (Id, Tijd)
      Select Id, GETDATE() from Signin where [Email] = @Email
  

Это действительно обновляет и вставляет, но делает это для всего элемента в классе

Я знаю, что должен что-то сделать с smalldatetime и функцией Getdate()

Надеюсь, это достаточно понятно; если нет, пожалуйста, дайте мне знать.

Ответ №1:

Похоже, вам просто нужно это:

 if(@Count = 1)
     Begin
      Select 1 as ReturnCode
      INSERT INTO Logintijd (Id, Tijd)
      Select Id, GETDATE() from Signin where [Email] = @Email
     End
  

Комментарии:

1. О, вау, не думал, что это будет так просто. Большое спасибо, не думал, что GETDATE () можно использовать подобным образом

2. Но обновляет ли это время, когда пользователь выходит из системы, и регистрирует ли более позднее время снова

3. Это ВСТАВКА, поэтому нет, она не выполняет ОБНОВЛЕНИЕ, но вы можете использовать GETDATE() при ОБНОВЛЕНИИ таким же образом.

4. Я пытался выяснить, как работает класс update, но я не могу найти, в чем проблема, я публикую то, что я пробовал в исходном сообщении, надеюсь, вы все равно ответите

5. Из вашего вопроса неясно, что вы хотите, чтобы обновление выполняло. Возможно, вы хотите использовать @Email в предложении WHERE?