Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Anweisung einfügen + Tabellendaten und Variable im Trigger kombinieren

Sie können einen Trigger nicht so behandeln, als würde er jeweils eine Zeile verarbeiten. Wenn die Einfügung mit einer Klausel mit mehreren Werten oder einer verschachtelten Auswahl erfolgt, wird der Trigger einmal für die gesamte Operation ausgelöst, was bedeutet, dass Sie immer nur eine beliebige @UserID verarbeiten.

Hier gehe ich davon aus, dass Ihre PlaneGPSCoordinates-Tabelle genau 5 Zeilen hat und dass dies die Koordinaten sind, die jeder neue Benutzer erhält.

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

Aber das wirft die Frage auf, warum dieselben Koordinaten für jeden Benutzer kopieren? Ist das etwas, was sie oft aktualisieren werden, willst du nur ein paar Standardwerte dort setzen, um damit anzufangen?