向表中添加行然后循环回来为不同的用户标识添加更多行

时间:2013-04-29 15:53:52

标签: sql sql-server loops insert

我有一个包含4列的表--ID,ClubID,FitnessTestNameID和DisplayName 我有另一个名为Club的表,它有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)')

1 个答案:

答案 0 :(得分: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及更高版本中有效。

Robert Sheldon撰写了一篇很好的文章,其中包含许多有用的示例: Table Value Constructors in SQL Server 2008