2012-05-21 44 views
1

我試圖編寫一個觸發器來處理following problem。我試圖從插入的表中取出所需的變量,將它與另一個表中的數據結合起來,並將它作爲一個插入到所需的表中(我知道這是一種模糊/混亂,忍受着我......)插入語句+組合表格數據和變量觸發器

這是我希望數據庫的工作:

三個表在數據庫中:

  1. 表的用戶:
    的用戶信息的表,包括:一個識別號碼
  2. 表PlaneGPSCoordinates :
    實時GPS座標表。這個表的大小從來沒有變化,值只是更新。
  3. 表匹配信息:
    一個表有兩列,用戶ID號和平面座標。

觸發應做到以下幾點:

  1. 新插入表「用戶」行(即用戶註冊)
  2. 觸發自動拷貝PlaneGPSCoordinates的數據(不包括關鍵列)和新的用戶ID號碼,並將兩者插入到Table MatchingInformation中。每5行座標將有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結合起來,將其推送到匹配表...

任何幫助都非常感謝!

+1

觸發器對行集進行操作。您的代碼預計一次只能插入一行:'SELECT @userID = inserted.IF FROM inserted'。 – HABO

回答

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 

但是,這引出了一個問題,爲什麼同樣的座標複製爲每個用戶?這是他們經常更新的東西,你只是想在那裏設置一些默認值?

+0

太棒了,你是個傳奇人物。現在就把這個,再次感謝 – keynesiancross

+0

,我可以確認它的工作原理,再次感謝 – keynesiancross