Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Inserisci istruzione + Combina i dati della tabella e la variabile nel trigger

Non puoi trattare un trigger come se gestisse una riga alla volta. Se l'inserimento avviene utilizzando una clausola multi-valore o una selezione nidificata, il trigger si attiverà una volta per l'intera operazione, il che significa che gestirai sempre e solo un @UserID arbitrario.

Qui presumo che la tua tabella PlaneGPSCoordinates abbia esattamente 5 righe e che quelle siano le coordinate che ottiene ogni nuovo utente.

CREATE TRIGGER dbo.Matching
ON dbo.UserInfo
FOR INSERT
AS
BEGIN
  SET NOCOUNT ON;
  INSERT dbo.MatchingInformation(GPS1, GPS2, UserID)
    SELECT p.GPS1, p.GPS2, i.UserID
      FROM dbo.PlaneGPSCoordinates AS p
      CROSS JOIN inserted AS i;
END
GO

Ma questo pone la domanda, perché copiare le stesse coordinate per ogni utente? È qualcosa che aggiorneranno spesso, vuoi solo inserire alcuni valori predefiniti lì per iniziare?