2013-04-29 52 views
0

我有4個列的表 - ID,ClubID,FitnessTestNameID和顯示名稱 我有一個名爲俱樂部另一個表,它具有ID和名稱添加錶行則回送和不同的用戶ID添加更多的行

我想爲每個俱樂部的第一張表添加兩行數據

我可以寫一個這樣的語句,但有人可以告訴我如何創建一個循環,以便我可以插入兩行,設置@clubid + 1然後再循環回去?

declare @clubid int 
set @clubid = 1 

insert FitnessTestsByClub (ClubID,FitnessTestNameID,DisplayName) 
values (@clubid,'1','Height (cm)') 

insert FitnessTestsByClub (ClubID,FitnessTestNameID,DisplayName) 
values (@clubid,'2','Weight (kg)') 
+0

你爲什麼要改變的標籤?添加您使用的平臺 – Kermit 2013-04-29 15:58:40

+0

我正在使用MSSQL – user2332742 2013-04-29 16:09:40

+0

發佈表的CREATE語句。有些列是「IDENTITY」嗎? – 2013-04-29 16:54:40

回答

3

你也許可以只用一條語句來做到這一點。無需循環:

INSERT INTO FitnessTestsByClub 
    (ClubID, FitnessTestNameID, DisplayName) 
SELECT 
    c.ID, v.FitnessTestNameID, v.DisplayName 
FROM 
    Club AS c 
    CROSS JOIN 
    (VALUES 
     (1, 'Height (cm)'), 
     (2, 'Weight (kg)') 
    ) AS v (FitnessTestNameID, DisplayName) 
WHERE 
    NOT EXISTS        -- a condition so no duplicates 
    (SELECT *        -- are inserted 
     FROM FitnessTestsByClub AS f   -- and the statement can be run again 
     WHERE f.ClubID = c.ID    -- in the future, when more clubs 
    )          -- have been added. 
    ; 

Table Value Constructor語法上方((VALUES ...)建設)是從2008年和以後的版本有效。

有一個很好的文章有很多,如何使用它們有用的例子,由羅伯特·謝爾頓:Table Value Constructors in SQL Server 2008

+0

你假設他不想爲未來俱樂部尚未加入俱樂部表的俱樂部添加此項功能,並且他將在新俱樂部添加某種「如果這些俱樂部尚不存在」時運行此項邏輯 – jimdrang 2013-04-29 17:04:58

+0

@jimdrang不,我不是。未來在俱樂部增加時,在俱樂部表格中,該聲明(稍微改變)可以爲每個俱樂部再插入2行。 – 2013-04-29 17:06:58

+0

你要麼假設他不想或者你認爲他會知道如何改變這個/想出另一種處理未來俱樂部的方法。 – jimdrang 2013-04-29 17:11:16