2010-07-30 75 views
2

我对SQL很陌生,所以请原谅我的无能。插入触发器从表1插入到表格2

我想写一个触发器,在插入表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 
... 

我不知道该从哪里走(如果这是正确的,我现在没有sql来检查)。任何方向将不胜感激。

+1

什么是您使用RDBMS让我们从安装(这将有相同的列名作为输入数据)的数据,并用它来插入到您的详细信息表?触发器语法因Oracle,MySQL等不同而异。 – 2010-07-30 16:22:16

+1

嗨,欢迎来到Stack Overflow。这是哪个数据库引擎? – 2010-07-30 16:22:34

+0

我希望我知道如何为这个主板上的许多其他人可以“闻到”T-SQL/SQL Server查询... – 2010-07-30 16:24:39

回答

5

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

如果您处于UPDATE触发器中,则会得到两组数据DELETED和INSERTED - 逻辑上,DELETED是旧数据将被新INSERTED数据覆盖。

对你而言,让我们在这里做几件事。首先,它是一个INSERT触发器,所以我们称之为。然后

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 

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

+2

另一件重要的事情是,SQL Server中的触发器对每个插入操作一次,如果插入一组记录,则必须能够处理该事件。这段代码是这样做的,但我希望提问的人理解为什么要使用基于集合的逻辑,而不是尝试将某些东西设置为变量并使用values子句。此外,总是通过执行多行插入更新或删除来测试触发器。 – HLGEM 2010-07-30 16:49:36

+0

优秀的答案,非常感谢您的帮助和见解。 – 2010-07-30 17:25:02

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 

只需用列名替换列1,列2和栏3。