2013-07-14 127 views
1

下面是详细的问题: Database diagram在INSERT语句中需要帮助

我想从源表T1的数据填充到目标表T2,T3和T4。现在, 我在做什么,首先,我插入T2为:现在

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

,插入在T3和T4,我需要一些脚本,可以从T2 和休息采取ID山坳数据来自t1的列数据。

任何答案将不胜感激。由于

回答

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 
+0

是的,你的假设是绝对正确的。谢谢sgeddes ... :) – Prateek

+0

@Prateek - np,很高兴我可以帮助! – sgeddes

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 
+0

感谢,Andomar, 嗯,我想我没有简要解释我的问题.... 总之编辑了这个问题.. – Prateek

1

我没有测试过,但我看到类似的...在T1 INSERT触发器是

一)插入到T2后(插入到t2(t2.t2Data0,t2.t2Data1)中选择t1.t2Data0,t2.Data1从t1插入t1.id = inserted.id上插入)

b)选择范围标识(select @ T2ID = SCOPE_IDENTITY()

C)插入到T3(插入到T3(ID,t3data0)选择@ T2ID,从t1 t.t3data0联接插在t1.id = inserted.id)

d)插入到T4(插入到T4( ID,t4data0)选择@ T2ID,从T1 t.t4data0联接插在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 

当然,假设这种情况下对应于您的需求

+0

好主意,在t2表上有一个触发器,然后使用魔法列(插入或删除),在这种情况下插入。插入其他两个表格(t3&t4).. – Prateek

+0

想一想,这不是一个好主意。因为这只有当你有一个交易时才有效。如果你插入了多个条目,那么这是行不通的。感谢upvote,无论如何:) – cleantone