1

我正在尝试编写一个处理以下问题的触发器。我一直试图从插入的表中提取所需的变量,将其与另一个表中的数据结合起来,并将其作为一个插入到所需的表中(我知道这有点模糊/令人困惑,请耐心等待......)

这就是我希望数据库工作的方式:

数据库中的三个表:

  1. 用户
    表:用户信息表,包括识别号
  2. Table PlaneGPSCoordinates:
    实时 GPS 坐标表。该表的大小永远不会改变,只是更新了值。
  3. Table MatchingInformation:
    一个有两列的表,用户ID号和平面坐标。

触发器应执行以下操作:

  1. 插入表“用户”的新行(即用户注册)
  2. Trigger自动复制PlaneGPSCoordinates中的数据(不包括key列)和新用户的ID号,并将两者插入到Table MatchingInformation中。每 5 行 Coordinates 将有 1 个用户 ID 号 -> 即触发器将向 MatchingInformation 添加 5 行,其中 userID = 新用户的 ID 和坐标均从表 PlaneGPSCoordinates 中复制。

目前,我不完整的代码如下所示:

CREATE TRIGGER dbo.Matching
ON dbo.UserInfo
FOR INSERT
AS

DECLARE @userID as INT

BEGIN
SET NOCOUNT ON;

SELECT @userID = inserted.ID FROM inserted

INSERT....

END
GO

我对 SQL 很陌生,所以假设最坏的情况。我不知道现在如何创建 INSERT 语句,它在其中提取 GPS 坐标,并将其与用户 ID 结合,将其推送到匹配表...

任何帮助深表感谢!

4

1 回答 1

1

您不能将触发器视为一次处理一行。如果使用多值子句或嵌套选择发生插入,则触发器将在整个操作中触发一次,这意味着您将只能处理一个任意@UserID。

在这里,我假设您的 PlaneGPSCoordinates 表正好有 5 行,这些是每个新用户获得的坐标。

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

但这引出了一个问题,为什么要为每个用户复制相同的坐标?这是他们要经常更新的东西,你只是想在那里放一些默认值开始?

于 2012-05-21T17:57:17.447 回答