1

这是详细的问题: 数据库图

我想将源表 t1 中的数据填充到目标表 t2、t3 和 t4 中。现在,我在做什么,首先我插入 t2 为:

insert into t2(t2.t2Data0, t2.t2Data1)
select t1.t2Data0,t1.t2.Data1 from t1

现在,为了插入 t3 和 t4,我需要一些脚本,它可以从 t2 获取 ID col 的数据和从 t1 获取其余列数据。

任何答案将不胜感激。谢谢

4

3 回答 3

2

如果我正确理解您的问题,在您将行插入 t2 后,您想使用它的标识字段来帮助填充 t3 和 t4?

如果是这样,您可以使用JOIN

INSERT INTO t3 
SELECT t2.id, t1.t3Data0
FROM t1 
    INNER JOIN t2 ON t1.t2Data0 = t2.tdData0 AND t1.t2Data1 = t2.tdData1

INSERT INTO t4 
SELECT t2.id, t1.t4Data0
FROM t1 
    INNER JOIN t2 ON t1.t2Data0 = t2.tdData0 AND t1.t2Data1 = t2.tdData1
于 2013-07-14T17:47:36.550 回答
1
insert  t1
        (c1, c2, c3, c4)
select  coalesce(t2.c1, t3.c1, t4.c1)
,       t2.c2
,       t3.c3
,       t4.c4
from    t2
full outer join    
        t3
on      t2.c1 = t3.c1
full outer join    
        t4
on      t2.c1 = t4.c1
        or t3.c1 = t4.c1
于 2013-07-14T16:13:37.550 回答
1

我还没有测试过,但我看到了类似的东西......在 t1 上插入触发器之后

a) 插入 t2 (插入 t2(t2.t2Data0, t2.t2Data1) select t1.t2Data0,t2.Data1 from t1 join in t1.id=inserted.id)

b) 选择作用域身份(选择@T2ID=SCOPE_IDENTITY()

c) 插入 t3(插入 t3(id, t3data0) select @T2ID, t.t3data0 from t1 join insert on t1.id=inserted.id)

d) 插入 t4 (插入 t4(id, t4data0) select @T2ID, t.t4data0 from t1 join 插入 t1.id=inserted.id)

CREATE TRIGGER trgName ON [t1] 
FOR INSERT 
AS
    declare @T2ID int
    insert into t2(t2.t2Data0, t2.t2Data1) select t1.t2Data0,t2.Data1 from t1 join inserted on t1.id=inserted.id
    select @T2ID=SCOPE_IDENTITY()
    insert into t3(id, t3data0) select @T2ID, t.t3data0 from t1 join inserted on t1.id=inserted.id
    insert into t4(id, t4data0) select @T2ID, t.t4data0 from t1 join inserted on t1.id=inserted.id
end

当然,假设这个场景符合你的需求

于 2013-07-14T18:02:06.980 回答