2011-11-23 80 views
0

我有3个表格(Users,CourseUsersCourses,代表分配给单个用户的课程)。如何为SQL中的每一行创建一个循环?

我想创建一个程序,只要我创建一个新课程,就会将这门课程分配给每个用户。我看到我需要的是对于每个循环来遍历每个插入CourseUsers表中的新行的用户

如何在SQL中创建循环?

回答

6

你不需要循环。

DECLARE @CourseId INT; 

INSERT INTO Courses(Name) VALUES('Some Course'); 

SET @CourseId = SCOPE_IDENTITY(); 

INSERT INTO CourseUsers(UserId, CourseId) 
SELECT UserId, @CourseId 
FROM Users; 
+0

以及我如何为每个UserId重复一次? –

+3

@RodrigoAlves这将为每个用户插入1行。因此它已经在重复你所指的。 – Curt

+2

@RodrigoAlves - 你不需要。 'SELECT FROM用户'做到这一点。 –

2

在这种情况下,你不这样做。

您可以发出将在CourseUsers表中插入新行对每一位用户的插入语句:

INSERT INTO CourseUsers(CourseId, UserId) 
SELECT @CourseId, UserId 
FROM Users 

SQL是一个基于集合的语言:通常你可以在整个数据集的工作,而不需要循环。

+0

我该怎么做 –

1

您不需要循环来完成此操作。

您可以使用INSERTtrigger并访问INSERTED逻辑表,对其结果进行操作。

1

尝试 -

INSERT INTO CourseUsers (CourseID,UserID) 
SELECT 7, UserID FROM Users 

其中7是你的课程ID(这将发生显着变化,从课程当然!)。

相关问题