2009-07-13 7 views
4

このSQLで私を助け:「テーブル内のすべての行のためにこれを行う」

[SQL Server 2005を使用して]私は、ユーザーの完全なテーブルを持って、私は(16,000+)表内のすべての単一のユーザーを割り当てます割り当てテーブルに新しいエントリを作成するだけでなく、コース追跡テーブルの新しいエントリを作成して、そのデータを追跡することができます。問題は、私はあなたができるとは思えないので、SQLでループを行う方法を知らないですが、これを行う方法がある必要があります。 userテーブルのuserIDを持つ2つのテーブルのそれぞれ...

どうすればよいですか?助けてください!

+0

ありがとうございました!!! – BigOmega

答えて

6

何かのように:このような

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

何か、ループの必要はありません、あなたはDUPがあなたでこれを行うだろうもちろん値

insert into AssingmentTable 
select userid,1 
from UserTable 

insert into OtherTable 
select userid,1 
from UserTable 
13

を1に変更も明確な を使用している場合2挿入ステートメント。一貫性を確保するためtransactionでこれを囲みたい場合は、isolation levelを再確認して、2つのクエリの間で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 
+2

+1これは2つのステートメントを取り巻くトランザクションを持っているので、この答えに+1します。これは質問の意図を反映している可能性が高いからです。 –

0

は、多分私はあなたの質問をmisuderstand、私はあなたがSQLがセットに取り組んでいます

INSERT INTO TABLE2 
SELECT filed1, field2 field3 from TABLE1 
0

INSERT..SELECT文が必要だと思います。それはループを必要としません。

あなたが探しているものは "挿入する"コマンドかもしれません。

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ループを調べます。

多くの初心者の方には、カーソルを使用するという罠に陥ってはいけません。彼らは彼らの使い方を持っていますが、誤って使われてしまうとひどいことになります。ほとんどの場合、より良いやり方があります。

関連する問題