在插入触发器上从table1插入到table2

Bry*_*n V 2 sql t-sql sql-server triggers

我对SQL很新,请原谅我的无能.

我正在尝试编写一个触发器,在插入到表1时,将该记录插入到表2中.

表1是 [rps_lab_dev].[dbo].[Lab_Employee_Time_Off]

表2是 [dbo].[Lab_Employee_Time_Off_Detail]

CREATE TRIGGER updatetrig
ON [rps_lab_dev].[dbo].[Lab_Employee_Time_Off]

FOR INSERT

AS
...
Run Code Online (Sandbox Code Playgroud)

我不确定从哪里开始(如果这是正确的,我现在没有sql检查).任何方向将不胜感激.

Lit*_*les 5

对于SQL Server ...

CREATE TRIGGER updatetrig 
ON [rps_lab_dev].[dbo].[Lab_Employee_Time_Off] 

FOR INSERT 

AS 

INSERT INTO [dbo].[Lab_Employee_Time_Off_Detail] (Column1, Column2, Column3)
SELECT Column1, Column2, Column3 FROM inserted
Run Code Online (Sandbox Code Playgroud)

只需用列名替换Column1,Column2和Column3即可.


Raj*_*ore 5

当您处于INSERT的触发器中时,您将获得一组名为INSERTED的记录.您可以使用它来执行您想要的任何操作.

如果您处于UPDATE的触发器中,那么您将获得两组数据DELETED和INSERTED - 逻辑上,DELETED是将被新INSERTED数据覆盖的旧数据.

在你的情况下,让我们在这里做几件事.首先,它是一个INSERT触发器,所以我们称之为.然后让我们从INSERTED获取数据(它将具有与传入数据相同的列名)并使用它插入到您的详细信息表中

CREATE TRIGGER Lab_Employee_Time_Off_InsertAction
ON [rps_lab_dev].[dbo].[Lab_Employee_Time_Off]

FOR INSERT

AS


INSERT INTO [dbo].[Lab_Employee_Time_Off_Detail] (Col01, Col02, Col03)
SELECT Col1, Col2, Col3
FROM Inserted

GO
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/ms189799.aspx

  • 另一件重要的事情是,SQL Server中的触发器每次插入操作一次,如果插入一组记录,则必须能够处理.这段代码就是这样做的,但是我想让问题的人理解为什么要使用基于集合的逻辑,而不是尝试将事物设置为变量并使用values子句.此外,始终通过执行多行插入更新或删除来测试触发器. (2认同)