T-SQL: перемещение данных из одной таблицы в другую - PullRequest
0 голосов
/ 21 июня 2010

Что будет самым простым способом переноса моих данных в следующей ситуации:

Таблица 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

Я изменил дизайн, поэтому вместо четырех одинаковых столбцов таблицы я ввел столбец ANIMAL_TYPE, который будет перечислением {Cat = 0, Dog = 1, Bird = 2, Fish = 3}...

Какой самый быстрый способ переноса данных, учитывая, что если CAT_NAME или DOG_NAME пусто, то в новой таблице не следует создавать никаких записей.

Спасибо

Ответы [ 2 ]

1 голос
/ 21 июня 2010

Вы можете использовать простые 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 в обоих случаях - это когда ни одно из названий животных не установлено.

1 голос
/ 21 июня 2010

Вы можете просто сделать 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 первичным ключом ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...