我想垂直拆分现有的(已经填充了数据)。
假设我的起始表 ( 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
我想把这张表分成两张表,应该是,一张 forperson
和trip
。
将每个唯一的人复制到表中person
时,我希望将该表中自动创建的uniqueidentifier
列person.pId
(主键)复制到原始表中新创建的uniqueidentifier
列trip.personid
中,并将其转换为外键。(然后我会从原始表中删除trip.person
andtrip.age
列,并根据我的需要对数据进行结构化。)
当我将人员行插入新表时,我想我可以使用触发器,如下所示:
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.
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)
所以我现在想知道,这一切都错了吗?是否有另一种方法可以自动创建两个新拆分的表之间的键和关系?
编辑期望的结果:餐桌旅行:
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 字段当然应该都是唯一标识符)