2016-05-13 66 views
0

在我設置的SQL Server數據庫中,有一些我想在插入父記錄後創建「多個」表記錄的表,只插入自動生成的ID值和父記錄中的另一個值。SQL Server:在插入多個表後觸發on

例如:

  • 表1(Parent):的Auto_ID,名稱,createby,createdatetime
  • 表2(兒童):Auto_ID,Parent_Auto_ID,Col1中,Col2中,createby,createdatetime
  • 表3(兒童):Parent_Auto_ID,Col1中,createby,createdatetime

我已經有了:

CREATE TRIGGER [dbo].[ipamuserInsert] 
ON [dbbo].[ipamuser] 
FOR INSERT 
AS 
    SET NOCOUNT ON 

    INSERT INTO [dbo].[ipamuserdefault] 
     (ipamuserID, homepage, createby, createdatetime) 
    VALUES 
     SELECT 
      ipamuserID, 
      NULL, 
      createby, 
      GETDATE() 
     FROM 
      inserted 

    INSERT INTO [dbo].[ipamextlink] 
     (ipamuserID, link, createby, GETDATE()) 
    VALUES 
     SELECT 
      ipamuserID, null, createby, GETDATE() 
     FROM 
      inserted 
    GO 

這是正確的語法,還是我需要聲明一個單獨的臨時變量並存儲ipamuserID和createby值並使用它們?

回答

0

我不能測試這個沒有你的表定義,但我認爲你是現貨。

根據涉及的表的數量,我會考慮做這個動態。儘管如此,桌子的數量必須很高才能值得付出努力。

Editbased on comment: 您可以通過使用系統視圖來查找哪些表是相關的,並根據元數據動態生成Sql。這裏有幾篇文章讓你開始。

https://msdn.microsoft.com/en-us/library/ms186778.aspx

https://msdn.microsoft.com/en-us/library/ms177862.aspx

的基本結構是創建爲每個相關表的遊標環和用於在相關表中的每一列內的光標循環。您可以使用與您的問題中定義的格式相同的格式動態構建sql語句。

+0

好吧,平均來說,我需要爲每個1到多個父表創建3個子表。我不知道我將如何使這種動態。 – mattgcon

+0

如果你有3張父表和3張子表,我會堅持你的建議。如果可能有30多個父表,您可以查詢系統視圖來查找外鍵約束來查找需要插入「默認行」的表。 –