2016-12-27 47 views
-1

我有一個SQL表:自動將外鍵值替換爲外鍵ID?

TestResult 
- id 
- test_result 
- test_name 

每個測試使得它創建於TestResult中表約1000個記錄一個會議,我發現我現在有很多TEST_NAME的重複,這裏。

它是如何正確搭便車重複?

我認爲這是正確的創建兩個表:

TestName 
- name (Primary Key) 

TestResult 
- id (Primary Key) 
- result 
- name_id (Foreign Key) 

但我怎麼能自動(從測試名錶ID)取代,例如「TEST_1」 1?

我應該在我的1000個測試循環的每一步中做到這一點嗎? 1.嘗試獲取name_id(如果存在) 2.如果不存在,創建它 3.使用以前的ID將記錄添加到TestResult。

我認爲這太慢而愚蠢。這裏有什麼好的做法?或者,讓它保持原樣是個好主意?

+0

見下面的回答... – Alex

回答

0

設置的表,但保持TEST_NAME柱爲test_id沿(新FK),則:

UPDATE T SET 
    T.name_id = tn.name 
FROM TestResult T 
INNER JOIN TestName TN on 
    T.test_name = TN.name 
+0

歸在這種情況下沒有任何意義,因爲你還在複製名稱, 而是,我會有TestName(id int不是null主鍵身份,名稱varchar(xxxx)非null) 然後TestResult有id作爲外鍵,也許這就是你的意思畢竟。 – Alex

+0

但如何自動關聯它? – themis

+0

你不能,我有類似這樣的情況下,首先我們檢查是否在你的情況下,名稱存在於名稱表,如果是true,然後抓住名稱匹配的sid,並在testresult的插入上使用它,否則在testname表中插入新的測試名稱,獲取生成的標識,然後使用它插入到testresult。 – Alex