2009-07-13 28 views
4

[使用SQL Server 2005]幫我這個SQL:要這樣對錶中所有行「

我有一個完整的用戶的表,我想每一個用戶在分配表(16000)通過在分配表中創建一個新條目以及在課程跟蹤表中添加一個新條目,以便跟蹤他們的數據。問題是我不知道如何做一個SQL循環,因爲我不認爲你可以,但必須有一種方法來做到這一點...

對於表中的每個用戶 寫一行到每個用userID從用戶表中的兩個表...

我該怎麼做?請幫忙!

+0

謝謝大家! – BigOmega 2009-07-13 20:13:48

回答

6

喜歡的東西:

insert into CourseAssignment (CourseId, StudentId) 
select 1 -- whatever the course number is 
    , StudendId 
from Student 
1

這樣的事情,沒有必要循環,如果你有使用的DUP不同 也改變1與課程價值

insert into AssingmentTable 
select userid,1 
from UserTable 

insert into OtherTable 
select userid,1 
from UserTable 
13

你應該這樣做有2個插入語句。您需要用transaction來包裝它以確保一致性,並且可能需要仔細檢查我們的isolation level以確保在2個查詢之間從用戶表中獲得一致的讀取(查看SNAPSHOT或SERIALIZABLE以避免幻影讀取)。

BEGIN TRAN 

INSERT Courses 
     (UserID, CourseNumber, ...) 
SELECT UserID, 'YourCourseNumberHere', ... 
FROM Users 

INSERT Assignments 
     (UserID, AssignmentNumber, ...) 
SELECT UserID, 'YourAssignmentNumberHere', ... 
FROM Users 

COMMIT TRAN 
+2

+1這個答案,因爲它有圍繞這兩個陳述的交易,這更可能反映了問題的意圖。 – 2009-07-13 19:52:29

0

也許我misuderstand你的問題,但我認爲你需要INSERT..SELECT聲明

INSERT INTO TABLE2 
SELECT filed1, field2 field3 from TABLE1 
0

SQL適用於套。它不需要循環..

你在找什麼可能是「插入」命令。

INSERT INTO <new_table> (<list of fields, comma separated>) 
SELECT <list of fields,comma separated> 
FROM <usertable> 
WHERE <selection condition if needed> 
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; 
0

我想這個使用大量其他的都已經發布了基於集合的方法做...

...然而,只是爲了完整性值得注意的是,你可以做一個如果你真的想要循環。在線查看遊標和while循環以查看一些示例。

只是請不要陷入使用遊標的陷阱,因爲很多新手都這樣做。他們有他們的用途,但如果他們使用不當,他們可能會很糟糕 - 幾乎總是一個更好的做事方式。