2011-05-06 71 views
4

我在sql server 2008中上傳了一個csv文件到一個虛擬表(csv_upload)。我必須使用觸發器將數據分發到下面的表中;sql server連接表值在一次上傳中保存四次

Questions   Answers  Test    QAT 
---------   ---------  ------   ----- 
Questid   Ansid   Testid   Questid 
Question   Answers  Testname   Ansid 
                Testid 
                id 
                StdUsername 

觸發代碼;

INSERT INTO tbl_answers (Answer) 
select DISTINCT Answer 
from tbl_csv_upload 


INSERT INTO tbl_questions (Question) 
select DISTINCT Question 
from tbl_csv_upload 

INSERT INTO tbl_taqa (StdUsername,questid, ansid , testid) 
SELECT StdUsername ,q.quest_id,a.ans_id,t.test_id 
    FROM csv_upload c, questions q, answers a, test t 
WHERE c.Question = q.Question 
AND c.Answer = a.Answer 
AND t.test_id = IDENT_CURRENT('test') 

這觸發工作的很好從asp.net應用程序第一次上傳,但在第二次上傳保存數據4時在QAT表,而不是全,但其他表都OK。 請給我急需的幫助。

回答

1

也許您的數據中有重複的問題和答案。 DISTINCT擺脫當前存在於上傳表中的重複項,但下一次調用proc時,它們會再次插入,因爲它沒有考慮表中已有的值。

使用此插入答案:

INSERT 
INTO answers (answer) 
SELECT answer 
FROM tbl_csv_upload 
EXCEPT 
SELECT answer 
FROM answers 

questions類似查詢。

+0

當然,我實際上使用一個CSV文件進行開發,因此不止一次上傳....是否沒有其他方式來處理這可能會覆蓋或使用我的表中指出的testname或testid分開文件。 – user741469 2011-05-06 11:25:18

+0

@user:大約有四千種方法來處理這個問題。這種方式有什麼不好? – Quassnoi 2011-05-06 11:27:41