2010-06-21 120 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

相关问题