Sql 需要insert语句中的帮助吗

Sql 需要insert语句中的帮助吗,sql,sql-server,tsql,Sql,Sql Server,Tsql,具体问题如下: 我想将源表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中的其他列数据 任何答复都将不胜感激。谢谢如果我正确理解了您的问题,在您将行插入t2之后,您想使用它的标识字段来帮助填充t3和t4吗 i

具体问题如下:

我想将源表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中的其他列数据


任何答复都将不胜感激。谢谢

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

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
如果是,您可以使用联接:


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

如果是,您可以使用联接:


我还没有测试过,但我看到了类似于……t1上的后插入触发器

a插入t2插入t2t2.t2Data0,t2.t2Data1从t1上插入的t1连接中选择t1.t2Data0,t2.Data1。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
b选择范围标识选择@T2ID=范围标识

c插入t3插入t3id,t3data0选择@T2ID,t.t3data0从t1上插入的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
d插入t4插入t4id,t4data0选择@T2ID,t.t4data0从t1连接插入到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

当然,假设这个场景符合您的需求,我还没有测试过,但是我看到了类似于t1上的后插入触发器的东西

a插入t2插入t2t2.t2Data0,t2.t2Data1从t1上插入的t1连接中选择t1.t2Data0,t2.Data1。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
b选择范围标识选择@T2ID=范围标识

c插入t3插入t3id,t3data0选择@T2ID,t.t3data0从t1上插入的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
d插入t4插入t4id,t4data0选择@T2ID,t.t4data0从t1连接插入到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

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

谢谢,安多玛,我想我没有简单地解释我的问题。。。。不管怎样,编辑了这个问题。谢谢,安多玛,我想我没有简单地解释我的问题。。。。不管怎么说,你的假设是完全正确的。谢谢sgeddes…:@Prateek-np,很高兴我能帮上忙!是的,你的假设完全正确。谢谢sgeddes…:@Prateek-np,很高兴我能帮上忙!好主意,在t2表上有一个触发器&然后使用magical columnserted或deleted,在本例中是inserted。在另外两张表3和表4中插入……想想看,这不是一个好主意。因为这只在您有一个事务时有效。如果在“插入”中有多个条目,则这将不起作用。无论如何,谢谢你的投票:好主意,在t2表上有一个触发器&然后使用神奇的插入或删除列,在本例中是插入。在另外两张表3和表4中插入……想想看,这不是一个好主意。因为这只在您有一个事务时有效。如果在“插入”中有多个条目,则这将不起作用。无论如何,谢谢你的投票: