在以下情况下,迁移数据的最简单方法是什么:
表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个相同的表列,而是引入了一个ANIMAL_TYPE
列,它将是一个枚举{Cat = 0,Dog = 1,Bird = 2,Fish = 3} ...
迁移数据的最快方法是,考虑到如果CAT_NAME
或DOG_NAME
为空,则不应在新表中创建记录。
由于
答案 0 :(得分: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
主键...
答案 1 :(得分: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
都是没有设置任何动物名称。