我有一个包含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)')
答案 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