Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# T-SQL:将数据从一个表移动到另一个表_C#_Tsql - Fatal编程技术网

C# T-SQL:将数据从一个表移动到另一个表

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

在以下情况下,迁移数据的最简单方法是什么:

表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 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。