插入语句+将表数据和变量组合在触发器中

时间:2012-05-21 17:51:20

标签: sql sql-server-2008

我正在尝试编写一个处理following problem的触发器。我试图从插入的表中提取所需的变量,将其与另一个表中的数据相结合,并将其作为一个表插入到所需的表中(我知道这有点模糊/混淆,请耐心等待...)

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

数据库中有三个表:

  1. 表用户:
    用户信息表,包括识别号
  2. Table PlaneGPSCoordinates:
    实时GPS坐标表。此表的大小不会改变,值只是更新。
  3. 表格匹配信息:
    一个包含两列的表,用户ID号和平面坐标。
  4. 触发器应执行以下操作:

    1. 新行插入表“用户”(即用户注册)
    2. 触发器自动复制PlaneGPSCoordinates中的数据(不包括键列)和新用户的ID号,并将两者插入Table MatchingInformation。每5行坐标将有1个用户ID号 - >即,触发器将向MatchingInformation添加五行,其中userID =新用户的ID和坐标全部从表PlaneGPSCoordinates复制。
    3. 目前,我的不完整代码如下:

      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相结合,将其推送到匹配表...

      非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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

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