如何根据第一个表中的insert插入另一个表中的行

时间:2014-11-07 05:39:09

标签: sql-server sql-server-2008

如果在表A中发生任何插入,那么我需要将最后插入的行插入表B中。

如何使用@@ rowcount。

我正在尝试下面的代码。

create table table1
(
id int identity(1,1),
column1 nvarchar
)

create table table2
(
id int identity(1,1),
column1 nvarchar
)


Create  procedure insert1
    @column1 nvarchar    
AS    
Declare @t int,@column2 nvarchar    
insert into table1 values(@column1)    
select * from table1    
set @t= (Select @@IDENTITY from table1)      
Insert into table2 values (@t)

请告诉我如何通过触发器执行相同操作。

2 个答案:

答案 0 :(得分:1)

您可以编写类似这样的触发器:

CREATE TRIGGER trgTableAInsert
ON dbo.Table1
FOR INSERT
AS
    INSERT INTO dbo.Table2(Column1)
       SELECT Column1
       FROM Inserted

注意事项:

  • 触发器每个声明称为一次,例如如果您的INSERT语句插入10行,则触发器称为一次Inserted包含这10个新插入的行(您是否要将所有10个行插入{{1} }}?)

  • 我建议始终在表格上使用架构前缀(TableB部分)

  • 我建议始终dbo.以及INSERT声明中明确指定列的列表 - 不要忽略那些! (或者当突然其中一个表发生变化时,您可能会遇到混乱和难以调试的问题)

答案 1 :(得分:1)

MERGE INTO Table1 AS t1 使用MyTable ON 1 = 0 - 始终生成“与目标不匹配”

当目标没有匹配时      - 插入表1:     INSERT(A,B,C)VALUES(t1.A,t1.B,t1.C)

--- ..并插入表2: OUTPUT inserted.ID,MyTable.D,MyTable.E,MyTable.F INTO表2(ID,D,E,F);