[使用SQL Server 2005]
我有一个充满用户的表,我想通过在分配表中创建一个新条目以及在课程跟踪表中的新条目,将表中的每个用户(16,000+)分配给一个课程,这样他们的可以跟踪数据。问题是我不知道如何在SQL中进行循环,因为我认为你不能这样做但是必须有办法做到这一点......
FOR TABLE中的每个用户 使用user TABLE ...
中的userID向两个表中的每一个表写一行我该怎么做?请帮忙!
答案 0 :(得分:13)
您可以使用2个插入语句执行此操作。您希望使用transaction来包装它以确保一致性,并且可能需要仔细检查我们的isolation level以确保在两个查询之间从users表中获得一致的读取(取看看SNAPSHOT或SERIALIZABLE以避免幻像读取。)
BEGIN TRAN
INSERT Courses
(UserID, CourseNumber, ...)
SELECT UserID, 'YourCourseNumberHere', ...
FROM Users
INSERT Assignments
(UserID, AssignmentNumber, ...)
SELECT UserID, 'YourAssignmentNumberHere', ...
FROM Users
COMMIT TRAN
答案 1 :(得分:6)
类似的东西:
insert into CourseAssignment (CourseId, StudentId)
select 1 -- whatever the course number is
, StudendId
from Student
答案 2 :(得分:1)
类似这样的东西,不需要循环,如果你有重复使用distinct 也用课程值改变1
insert into AssingmentTable
select userid,1
from UserTable
insert into OtherTable
select userid,1
from UserTable
答案 3 :(得分:0)
也许我误解了你的问题,但我认为你需要INSERT..SELECT声明
INSERT INTO TABLE2
SELECT filed1, field2 field3 from TABLE1
答案 4 :(得分:0)
SQL适用于集合。它不需要循环..
您正在寻找的可能是“插入”命令。
INSERT INTO <new_table> (<list of fields, comma separated>)
SELECT <list of fields,comma separated>
FROM <usertable>
WHERE <selection condition if needed>
答案 5 :(得分:0)
--grab 1 record for each student, and push it into the courses table
--i am using a sub-select to look up a course id based on a name
--that may not work for your situation, but then again, it may...
INSERT INTO COURSES(
COURSE_ID
,STUDENT_ID
)
SELECT
(SELECT COURSE_ID FROM COURSES WHERE COURSE_NAME = 'MATH')
,STUDENT_ID
FROM
STUDENTS;
--grab your recently entered course data and create an entry in
--your log table too
INSERT INTO COURSE_DATA(
COURSE_ID
,STUDENT_ID
)
SELECT
COURSE_ID
,STUDENT_ID
FROM
COURSES;
答案 6 :(得分:0)
我会使用很多其他人已经发布的基于集合的方法来做到这一点......
...但是,为了完整性,值得注意的是,如果你真的想要,你可以做一个循环。查看游标和在线书籍中的循环以查看一些示例。
请不要像许多新手那样陷入使用游标的陷阱。它们有它们的用途,但是如果它们被错误地使用它们会很糟糕 - 几乎总是有更好的做事方式。