0

我有一个有 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)')
4

1 回答 1

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.
  ;

上面的表值构造器语法((VALUES ...)构造)从 2008 版及更高版本开始有效。

Robert Sheldon 撰写了一篇不错的文章,其中包含许多有用的示例说明如何使用它们:SQL Server 2008 中的表值构造函数

于 2013-04-29T16:59:46.283 回答