Я хотел бы вертикально разделить уже существующие (уже заполненные данные).SQL: таблица с вертикальным разделением и создание/заполнение ключей, отношение внешних ключей
Say моей стартовой стол (trip
) выглядит следующим образом:
ID Person Age Trip_to Date
... Alice 21 Los Angeles 2015-04-01
... Bob 35 New York 2015-03-15
... Bob 35 Chicago 2015-03-20
... Bob 35 San Francisco 2015-03-29
... Carol 29 Miami 2015-03-30
... Carol 29 Boston 2015-04-05
Я хотел бы разделить эту таблицу на две таблицы, как это должно быть, по одному для person
и trip
.
При копировании каждого уникального человека в таблицу person
, я хочу автоматически созданный uniqueidentifier
столбец в этой таблице person.pId
(первичный ключ), которые будут скопированы во вновь созданный uniqueidentifier
колонке trip.personid
в исходной таблице и превратить это в иностранный ключ. (Я бы затем удалил столбец из исходной таблицы и имел данные, структурированные так, как они мне нужны.)
Я думал, что могу использовать триггер для этого, когда я вставляю строки человека в новую таблицу, как так:
CREATE TRIGGER tr_person
on person
after INSERT
as
begin
UPDATE Trip
SET personId=(SELECT i.pId from inserted i)
WHERE person=(SELECT i.person from inserted i) and age=(SELECT i.age from inserted i)
END
Тем не менее, я получаю это:
Subquery returned more than 1 value.
This is not permitted when the subquery follows =, !=, <, <= , >, >=
or when the subquery is used as an expression.
Видимо триггер выполняет только после того, как все (! потенциально множественные) вставки были выполнены, и к тому времени запроса на вставленный больше не допускается f или мой SET
.
Я тоже думал об использовании OUTPUT
пункта о INSERT
заявлении, но это не будет работать либо
Insert into person (Driver, Age)
OUTPUT inserted.pId INTO trip.personId WHERE trip.person=inserted.person AND trip.Age=inserted.Age
(Select DISTINCT Person, Age FROM Trip)
Так мне интересно, сейчас, я буду об этом все не так? Есть ли другой способ автоматического создания ключей и отношений между двумя новыми таблицами разделения?
EDIT Желаемый результат: Таблица поездки:
ID Trip_to Date PersonId
... Los Angeles 2015-04-01 xxxx1
... New York 2015-03-15 xxxx2
... Chicago 2015-03-20 xxxx2
... San Francisco 2015-03-29 xxxx2
... Miami 2015-03-30 xxxx3
... Boston 2015-04-05 xxxx3
Таблица человек
pId Person Age
xxxx1 Alice 21
xxxx2 Bob 35
xxxx3 Carol 29
(поля ID все должно быть uniqueidentifiers, конечно)
Пожалуйста, сообщите ожидаемый результат. –
Я добавил таблицы, как бы хотел, чтобы они выглядели; Надеюсь, это поможет? Приветствия. – TVogt