2010-06-21 169 views
0

請告訴我會是最簡單的方法遷移在以下情況下我的數據:T-SQL:從一個表將數據移動到另一個

表A:動物

ANIMAL_ID (PK,IDENTITY) 
CAT_NAME 
DOG_NAME 
BIRD_NAME 
FISH_NAME 

表B:ANIMAL_NEW

ANIMAL_ID (PK,IDENTITY) 
ANIMAL_TYPE(INT) 
ANIMAL_NAME 

我已經改變了設計,所以代替具有相同表格的列4,I引入ANIMAL_TYPE柱,這將是一個枚舉{貓= 0,狗= 1,波導= 2,魚= 3} ...

遷移數據的最快方法是什麼?考慮到如果CAT_NAMEDOG_NAME爲空,那麼不應在新表中創建記錄。

感謝

回答

1

你可以使用簡單的CASE

INSERT INTO animal_new(animal_id, animal_type, animal_name) 
SELECT animal_id, 
    animal_type = 
    CASE 
    WHEN LEN(cat_name) > 0 THEN 1 
    WHEN LEN(dog_name) > 0 THEN 2 
    WHEN LEN(bird_name) > 0 THEN 3 
    WHEN LEN(fish_name) > 0 THEN 4 
    ELSE 5 
    END, 
    animal_name = 
    CASE 
    WHEN LEN(cat_name) > 0 THEN cat_name 
    WHEN LEN(dog_name) > 0 THEN dog_name 
    WHEN LEN(bird_name) > 0 THEN bird_name 
    WHEN LEN(fish_name) > 0 THEN fish_name 
    ELSE '' 
    END 
FROM animal; 

ELSE在這兩種情況下是當沒有的動物名稱已設置。

+0

真棒,謝謝:) – FaNIX 2010-06-21 22:12:11

1

你可以做4個獨立的語句:

INSERT INTO animal_new (animal_id, animal_type, animal_name) 
SELECT 
    animal_id, 0, cat_name 
FROM 
    animal 
WHERE 
    cat_name IS NOT NULL 

INSERT INTO animal_new (animal_id, animal_type, animal_name) 
SELECT 
    animal_id, 1, dog_name 
FROM 
    animal 
WHERE 
    dog_name IS NOT NULL 

(etc) 

這是假設只有cat_name,dog_name,bird_name之一,fish_name是在原始的設計永遠不NULL。如果不是的話,那麼你將有麻煩與新animal_id主鍵...

+0

是的,事情,有時沒有他們有價值,但行仍然存在,EA:有一個ID。 – FaNIX 2010-06-21 05:58:16

相關問題