C# T-SQL:将数据从一个表移动到另一个表
在以下情况下,迁移数据的最简单方法是什么: 表A:动物C# T-SQL:将数据从一个表移动到另一个表,c#,tsql,C#,Tsql,在以下情况下,迁移数据的最简单方法是什么: 表A:动物 ANIMAL_ID (PK,IDENTITY) CAT_NAME DOG_NAME BIRD_NAME FISH_NAME 表B:新动物 ANIMAL_ID (PK,IDENTITY) ANIMAL_TYPE(INT) ANIMAL_NAME 我改变了设计,所以我没有使用4个相同的表列,而是引入了一个ANIMAL_TYPE列,它将是一个枚举{Cat=0,Dog=1,Bird=2,Fish=3} 考虑到如果CAT\u NAME或DOG\u
ANIMAL_ID (PK,IDENTITY)
CAT_NAME
DOG_NAME
BIRD_NAME
FISH_NAME
表B:新动物
ANIMAL_ID (PK,IDENTITY)
ANIMAL_TYPE(INT)
ANIMAL_NAME
我改变了设计,所以我没有使用4个相同的表列,而是引入了一个ANIMAL_TYPE
列,它将是一个枚举{Cat=0,Dog=1,Bird=2,Fish=3}
考虑到如果CAT\u NAME
或DOG\u NAME
为空,则不应在新表中创建任何记录,迁移数据的最快方法是什么
谢谢您只需做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)
这是假设在原始设计中,猫名、狗名、鸟名、鱼名中只有一个是非空的。如果不是这样的话,那么新的
animal\u id
主键将出现问题…您可以使用简单的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
都是指没有设置任何动物名称。是的,有时它们都没有值,但行仍然存在,ea:有一个ID。